索引组织表

来源:互联网 发布:淘宝退货后还能评价吗 编辑:程序博客网 时间:2024/05/17 09:26

 索引组织表(index-organized index)


由上图可以看出索引组织表的一个明显特点就是,B-tree结构但leaf block存放的是数据行,没有physical rowid的出现。

1、对于索引组织表和堆表的区别,下面截取了ORACLE技术文档内容来说明:


2、溢出区(Overflow Area)

索引组织表的一个缺点就是比较容易导致块的分割和存储密度的降低,进而导致数据读取代价的增大。行的长度越长,则索引组织表的增长就越快,数据分割和存储密度降低发生的概率就越大。为此,引入了溢出区,把不重要或不经常使用的列数据保存在溢出区,也就是别的段空间里面,可以是同一个表空间的段空间也可以使不同表空间的段空间。

原理:在建立索引组织表的时候,设置了一个临界点PCTTHRESHOLD(该参数指定了索引块中可以使用的空间百分比),当达到这个临界点的时候,数据库就会把INCLUDING中指定的列数据保存到OVERFLOW指定的表空间中。此时,索引组织表就被分成了The index entry和The overflow part两部分,index entry中有rowid指向the overflow part中的数据行。

3、Secondary Indexes on Index-Organized Tables

secondary index:对索引组织表所建立的索引,这跟普通的索引一样,独立存放于索引组织表之外,不过,其保存的是logical rowid而不是physical rowid,因为索引组织表是依据主键或唯一键来定位数据行的。logical rowid跟physical rowid一样,也是64位,依赖于主键而建立,其长度也取决于主键的长度。使用secondary index 可以快速地访问非主键数据。如下:

索引组织表数据:10,Administration,200,1700
20,Marketing,201,1800
30,Purchasing,114,1700
40,Human Resources,203,2400

secondary index:1700,*BAFAJqoCwR/+
1700,*BAFAJqoCwQv+
1800,*BAFAJqoCwRX+
2400,*BAFAJqoCwSn+

4、Logical Rowids and Physical Guesses

一个logical rowid包括了一个Physical Guesses,即物理猜。所谓物理猜,就是index第一次被建立的时候的physical rowid.可以利用physical guesses来绕开对主键的扫描。

索引组织表的扫描(使用secondary index):

---没有physical guesses,扫描分为两部:扫描secondary index,然后是扫描primary key index;

---有physical guesses

--physical guesses没有过期,则只需要扫描secondary index,然后就可以直接抓取对应的数据块即可;

--physical guesses已经过期,则扫描secondary index,然后抓取对应的错误数据块,然后还要进行一次primary key index扫描;

5、Bitmap Indexes on Index-Organized Tables

一个secondary index 可以是bitmap index,一个bitmap index存储一个对应每一个index key的位图。所有的bitmap index使用heap-organized mapping table,该mapping table所存放的是logical rowid.索引组织表的行移动不会使得bitmap index不可用。如下图:



---------------------------------------------------------------------------------------------------
如有错误,欢迎指正


技术交流QQ:1732035211
技术交流邮箱:1732035211@qq.com
新浪微博:数据库小菜鸟http://weibo.com/u/3132578390



原创粉丝点击