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、二级索引:也可理解为聚集索引,好比是我们人查字典时自已会使用的索引。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值