天天看点

索引组织表(IOT)

索引组织表会把表的存储结构改成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

关于二级索引: