了解oracle中的索引组织表

系统 1673 0
初识 oracle 中的索引组织表
    索引组织表( IOT )有一种类 B 树的存储组织方法。普通的堆组织表是以一种无序的集合存储。而 IOT 中的数据是按主键有序的存储在 B 树索引结构中。与一般 B 树索引不同的的是,在 IOT 中每个叶结点即有每行的主键列值,又有那些非主键列值。
如下图所示,在 IOT 所对应的 B 树结构中,每个索引项包括 < 主键列值,非主键列值 > 而不是 ROWID ,对于普通堆组织表, oracle 会有对应的索引与之对应,且分开存储。换句话说, IOT 即是索引,又是实际的数据。


了解oracle中的索引组织表
 
 
                                普通表索引与表数据的对应关系
        
了解oracle中的索引组织表
 
                             IOT 的索引项和表数据的对应关系

IOT 和普通表对于应用程序来说,例如 sql 查询语句,是没有区别的。也就是说 oracle 中对表的组织形式对应用来说是透明的。
       下表总结了 IOT 与一般表的区别:
   
普通表
IOT
ROWID 唯一确定一行录
主键唯一确定一行记录
可以不指定主键
必须指定主键
ROWID 伪列中保存物理 rowid ,可以构建二级索引
ROWID 伪列中保存逻辑 rowid ,可以构建二级索引
基于 rowid 进行访问
基于逻辑 rowid 进行访问
顺序扫描才能得到所有行
只须扫描索引即可返回所有行
可以和其它表一起聚集存储
不能存储为聚集表
可以包含 long lob 类型的列
可以包含 lob 类型但不可以包括 long 类型的列
 
使用 IOT 的好处:
1 、由于索引项和数据存储在一起,所以无论是基于主键的等值查询还是范围查询都能大大节省磁盘访问时间。
2 、为了能够更快地访问那些频繁访问的列,可以使用溢出存储选项将那些访问不频繁的列放在 B 树叶结点数据块之外的溢出堆空间中。这样一来便可以得到更小的 B 树,以及包含更多行的叶结点
3 、和堆组织表和索引不同,主键不需要被存储两次。
4 ROWID 伪列是基于主键值的逻辑 rowid ,而不是物理 rowid ,即使表被重新组织过,造成了基表行的迁移,二级索引仍然可用,不需要重建。
 
注:
1 Oracle 使用 rowid 数据类型存储行地址 ,rowid 可以分成两种,分别适于不同的对象, Physical rowids :存储 ordinary table,clustered table,table partition and subpartition,indexe,index partition and subpartition; Logical rowids : 存储 IOT 的行地址
2 、每个表在 oracle 内部都有一个 ROWID 伪列 , 它在所有 sql 中无法显示,不占存储空间 ; 它用于从表中查询行的地址或者在 where 中进行参照 , 一个例子如下:
    SELECT ROWID, last_name FROM employees;          Oracle 内部使用保留在 ROWID 伪列中的值构建索引结构 ,rowid 伪列不存储在 数据库 , 它不是数据库表的数据 , (从 database table 的逻辑结构来说)。事实上 , 在物理结构上 , 每行由一个或多个 row pieces 组成 , 每个 row piece 的头部包含了这个 piece address, rowid. 从这个意义上来说, rowid 还是占了磁盘空间的 .
3 、二级索引: 也可理解为聚集索引,好比是我们人查字典时自已会使用的索引。

了解oracle中的索引组织表


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论