IOT表和堆组织表

网友投稿 324 2022-08-24

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树,以及包含更多行的叶结点

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:走近Oracle数据字典--数据字典表
下一篇:助力地产数字化营销,腾讯云推出WeClient用户经营平台!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~