IOT表和堆组织表

 堆组织表Oracle里建立普通表的一种组织结构 

 

比如 
我们建立这样一个表 
create table test_iot 
( id int primary key, 
value varchar2(100) 

 

这里就是一个普通的堆组织表,


建表的时候会为主键id上建立基于B+树的索引,不过只对该列的数据进行索引,而不会在index里有value的信息,并且对于数据的存储来说无,是无序的数据集合。 


SQL> insert into test_iot values(1, '1'); 
1 row created. 
SQL> insert into test_iot values(2, '1'); 
1 row created. 
SQL> insert into test_iot values(4, '1'); 
1 row created. 
SQL> insert into test_iot values(3, '1'); 
1 row created. 

SQL> select * from test_iot; 

ID VALUE 
---------- ---------- 
1 1 
2 1 
4 1 
3 1 


我们可以插入数据看看,这个插入的顺序是无序的。 

索引组织表(IOT)有一种类B树的存储组织方法。普通的堆组织表是以一种无序的集合存储。而IOT中的数据是按主键有序的存储在B树索引结构中。与一般B树索引不同的的是,在IOT中每个叶结点即有每行的主键列值,又有那些非主键列值。Oracle里通过organization index来指定是一个IOT 


create table test_iot_1 
( id int primary key, 
value varchar2(100) 

organization index; 

SQL> insert into test_iot_1 values(1, '1'); 
1 row created. 
SQL> insert into test_iot_1 values(3, '1'); 
1 row created. 
SQL> insert into test_iot_1 values(2, '1'); 
1 row created. 
SQL> insert into test_iot_1 values(5, '1'); 
1 row created. 

SQL> select * from test_iot_1; 

ID VALUE 
---------- ---------- 
1 1 
2 1 
3 1 
5 1 


这里已经有顺序了 

这里在Rowid上两者也因为组织结构的不同导致差异 
对于普通的堆表用的物理Rowid,而IOT表是用的逻辑Rowid 


SQL> select a.*, rowid from test_iot a; 


ID VALUE ROWID 
---------- ---------- ------------------ 
1 1 AAALmBAAOAAAaXCAAA 
2 1 AAALmBAAOAAAaXCAAB 
4 1 AAALmBAAOAAAaXCAAC 
3 1 AAALmBAAOAAAaXCAAD 

SQL> select a.*, rowid from test_iot_1 a; 


ID VALUE ROWID 
---------- ---------- -------------------- 
1 1 *BAOBpboCwQL+ 
2 1 *BAOBpboCwQP+ 
3 1 *BAOBpboCwQT+ 
4 1 *BAOBpboCwQX+ 
5 1 *BAOBpboCwQb+ 

IOT的结构也决定了其在某些方面优于堆组织表 

 

IOT表主键和值在一起,主键不需要被存储两次,节省空间


IOT索引项和数据存储在一起,所以我们提到的主键覆盖在IOT里已经是可以达到了,主键里已经带了其他字段的信息,所以查询非主键覆盖的情况下能大大节省磁盘访问时间。 


由于IOT已经是有序的结构,所以定位明显比普通的对组织表要快。一来便可以得到更小的B树,以及包含更多行的叶结点 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值