索引组织表(IOT表):为什么引入索引组织表,好处在那里,组织结构特点是什么,如何创建,创建IOT的限制LIMIT。
IOT是以索引的方式存储的表,表的记录存储在索引中,索引即是数据,索引的KEY为PRIMARY KEY。数据的查询可以通过查询索引的同时查询到数据,因为索引和数据存储在一个数据块中,减少了一次磁盘I/O。数据是按照主键顺序创建的索引,索引中有对应的数据,这样依据主键做范围扫描时,减少了读取的数据块数量,减少了磁盘I/O。也减少了索引的存储空间,因为索引和数据存在一起。如果是B树索引就需要创建对索引的存储空间。
两个好处:一个是减少了范围扫描的磁盘I/O数据块数(页块中有数据,有索引),一个是避免了索引自身的空间开销,因为索引和数据在一起,不需要额外的空间。这些优点都是索引组织表的特点决定。
何时使用IOT:(1)数据的相关数据片需要存储在一起。(2)数据必须按照指定的顺序物理存储。IOT表多用于信息获取、空间应用和OLAP应用(OLAP:Online-Analysis Process)。
注意:索引组织表的所有优势来自于其结构,即数据在索引中,数据按照主键顺序存储。下面是索引组织表的结构。
重申:IOT按照索引顺序存储,页块中有索引也有数据。所以,对于范围扫描会读取更少的物理数据块。减少物理I/O可以更快的读取数据。
索引组织表的ROW OVERFLOW AREA。行溢出区。
索引组织表是以B-树方式存储的表,显然这种方式在索引页块中存储了更多的数据,如果索引组织表中某行的数据溢出(比如UPDATE了更大字节的列),此时就需要OVERFLOW区。索引组织表中行分成如下部分:
1、 索引实体:所有主键列的列值,指向行的溢出区的物理ROWID,一些非键列(由INCLUDING参数决定)。这个部分存储在索引段中。
2、 溢出部分:剩余非主键列的列值。这部分存储在溢出存储区段。
创建一个索引组织表。
SQL> create table iot_t(
2 token char(10),
3 doc_id number,
4 token_frequency number,
5 token_offsets varchar2(2000),
6 constraint pk_iot_t primary key(token,doc_id))
7 organization index
8 tablespace idx
9 pctthreshold 20
10 including token_frequency
11 overflow tablespace users;
Table created.
其中including token_frequency表示列token_frequency之间的非主键的列值和主键存储在一起,其余列的值要存入溢出区,在INDEX实体部分存储了对应行在的溢出区中的ROWID。
二级索引(IOT的)。理解为在索引之上的索引,IOT使用逻辑ROWID,根据主键计算得到的ROWID。
如下是索引组织表DEPARTMENTS在某个块中存储的记录,此时最后一行为location_id。
10,Administration,200,1700
20,Marketing,201,1800
30,Purchasing,114,1700
40,Human Resources,203,2400
如果我们要按照非主键列location_id来范围查找,此时就需要在location_id上创建二级索引,索引结构如下所示。
1700,*BAFAJqoCwR/+
1700,*BAFAJqoCwQv+
1800,*BAFAJqoCwRX+
2400,*BAFAJqoCwSn+
这里的ROWID是逻辑的,它基于该行对应的主键计算得到,所以二级索引最终还是通过主键索引发挥索引的作用。二级索引—IOT的主键(已排序)--行数据。
逻辑ROWID和物理Guesses:IOT的二级索引基于逻辑ROWID,这个ROWID包括物理guess。这个guess是索引创建时刻索引实体对应行的物理ROWID,所以只要实际的数据行没有移动(物理ROWID没有变)通过这个Guess可以找到数据,而不使用主键,但是IOT中行的物理地址会变化,而此时的逻辑ROWID依然有效,它不会根据行的物理地址变化而自动更新,但是它依然是有效地。所以需要一种机制来适应数据行位置的物理变化。--accuracy of physical guesses.
如果使用物理Guess:如果Guess是准确的,数据访问包括一个二级索引扫描和一个包含该行的数据块的磁盘I/O。如果不准确:数据访问包含一个二级索引扫描和获得错误数据的I/O,然后是依据主键的索引组织表的索引唯一扫描。显然主键是不会变的。来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26155341/viewspace-763495/ ,如需转载,请注明出处,否则将追究法律责任。