一、索引组织表(Index-Organized Table, IOT)
索引组织表是一类特殊的表,它将索引和表的数据存储在一起。普通表的数据以无序(Heap)的方式存放在数据库中。
而索引组织表按照主键进行排序,以二叉树的形式对表的数据进行存储。
索引组织表不存储ROWID,它通过主键来访问数据。
索引组织表适合通过主键对数据进行访问的应用。
1、优点
(1)快速的随机访问。索引和表的数据存储在一起,如果对表进行更新,Oracle只更新索引结构。
(2)快速的范围扫描。索引组织表已经按照主键对数据进行排序,因此,范围扫描的速度是很快的。
(3)更少的存储需求。索引数据和表的数据存储在一起,可以减少存储需求。普通的索引条目只包含索引值和指向数据行的ROWID
2、组成
(1)索引部分。存放主键值,频繁访问的部分非主键值,指向溢出区的ROWID
(2)溢出部分。用于存放非主键值。溢出区存放在一个溢出表空间中。用户可以指定溢出表空间。
3、示例
(1)创建索引组织表
SQL>crate table students(
name varchar(20) primary key,
id number,
location varchar2(200)
)
organization index
tablespace lmtbsb
pctthreshold 30
including location
overflow tablespace bigtbs_01;
注:索引组织表中一定要有主键,
pctthreshold:指定溢出比例,若超出限制,则溢出部分将被存储到溢出区中。
including:表示从这个列以后的所有列将存储在溢出区中。
overflow tablespace:指定溢出表空间
如果要想在索引组织表上创建位图索引,索引组织表必须带有映射(Mapping Table),如:在organization index下行加入:Mapping Table
若表已创建好,可以修改表
SQL>alter table students add mapping table;
(2)查看IOT
SQL>select owner,table_name,iot_name,iot_type
from dba_tables
where owner=‘test‘ and iot_type like ‘%IOT%‘;