索引组织表会把表的存储结构改成B树结构,以表的主键进行排序。这种特殊的表和其他类型的表一样, 可以在表上执行所有的DML和DDL语句。由于表的特殊结构,ROWID并没有被关联到表的行上。
对于一些涉及精确匹配和范围搜索的语句,索引组织表提供了一种基于键的快速数据访问机制。基于主键值的UPDATE和DELETE语句的性能也同样得以提高,这是因为行在物理上有序。由于键列的值在表和索引中都没有重复,存储所需要的空间也随之减少。
如果不会频繁地根据主键列查询数据,则需要在索引组织表中的其他列上创建二级索引。不会频繁根据主键查询表的应用程序不会了解到使用索引组织表的全部优点。对于总是通过对主键的精确匹配或范围扫描进行访问的表,就需要考虑使用索引组织表。
l另外,可以在索引组织表上建立二级索引。
示例:
CREATE TABLE TEST_IOT
(
A NUMBER,
B NUMBER,
C NUMBER,
D VARCHAR2 (4000 BYTE),
CONSTRAINT PK_TEST_IOT PRIMARY KEY (A, B)
)
ORGANIZATION INDEX
TABLESPACE TEST1
PCTTHRESHOLD 25
INCLUDING D
OVERFLOW TABLESPACE TEST2
* pctthreshold 确定iot叶块中为iot行保留的空间百分比,有效值为0-50(default:50)
* including 确定iot块中保存到的切换点,只要其不超过pctthreshold.指定列之后的任何列存放在overflow表空间.
* overflow 这个字句指定iot行溢出部分的表空间和存储参数.过多的使用overflow表可能抵消性能.
一个iot是由一个index和一个table两个segment组成的,由于存在OVERFLOW,所以会自动创建一个存放OVERFLOW的table,系统自动命名。
SQL> select table_name, tablespace_name, iot_name
2 from user_tables
3 where table_name like '%IOT%';
TABLE_NAME TABLESPACE_NAME IOT_NAME
------------------------------ ------------------------------ ------------------------------
SYS_IOT_OVER_11007 TEST2 TEST_IOT
TEST_IOT
SQL> select segment_name, segment_type, tablespace_name
2 from user_segments
3 where segment_name like '%IOT%';
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------ ------------------------------
PK_TEST_IOT INDEX TEST1
SYS_IOT_OVER_11007 TABLE TEST2
SQL> select index_name, index_type, table_name
2 from user_indexes
3 where table_name = 'TEST_IOT';
INDEX_NAME INDEX_TYPE TABLE_NAME
------------------------------ --------------------------- ------------------------------
PK_TEST_IOT IOT - TOP TEST_IOT
SQL> select constraint_name, constraint_type, table_name, index_name
2 from user_constraints
3 where constraint_name like '%IOT%';
CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME INDEX_NAME
------------------------------ --------------- ------------------------------ ------------------------------
PK_TEST_IOT P TEST_IOT PK_TEST_IOT
关于二级索引: