ORACLE堆表和索引组织表IOT优缺点

来源:互联网 发布:php 参数传递 编辑:程序博客网 时间:2024/05/16 06:05

堆表:

缺点:

主键索引和表数据分离,增加数据所占用空间。可能主键索引的所占用的空间大于该表所对应的空间

添加或者修改索引字段时需要维护索引,索引还会产生日志。

增加IO次数(通过索引的rowid来查找rowid对应块)。

数据会按照插入行所需要的空间大小按照一定顺序查找所需要的位置,没有一定顺序。

优点:

容易维护,

如果直接获取主键信息并且条件中含有字段除了主键字段外没有其他的字段,可以直接查询索引数据

索引组织表:

缺点:

优点:

主键索引和表数据存储在一起,并且如果主键索引字段所占的整行的比例非常大,节省的空间非常明显。

数据会按照一定顺序存储。

如果根据主键获取对应的行,读取的块会尽可能的少。因为相同的主键的值都存储在一起(相同主键的行数据插入彼此靠近的地方),减少物理IO和逻辑IO。


测试用例

创建索引表

create table  IOT_t(
id number,
owner varchar2(30),
object_name varchar2(30), 
object_id varchar2(30) ,
constraint prk_IOT_t primary key(id,owner,object_name) ) 
organization   index ;
insert into IOT_t
   select rownum id, t.owner,t.object_name,t.object_id from all_objects t ;


创建堆表
   create table  heap_t(
id number,
owner varchar2(30),
object_name varchar2(30), 
object_id varchar2(30) ,
constraint prk_heap_t primary key(id,owner,object_name) ) ;
insert into heap_t
   select rownum id, t.owner,t.object_name,t.object_id from all_objects t ;

索引组织表测试结果



堆表测试结果


明显的物理读一些,这些物理读就是通过索引IO产生的


create table iot_t1 (id  number,x varchar2(100),y varchar2(200), constraint prk_iot_t1 primary key (id )) 
organization index 
pctthreshold 10 including x overflow ;

如果插入行大于这个数据块的10%,这时剩下的部分会放在一处段里面,将id、x列放在索引表段中。