10.5 索引组织表的管理
像其他数据库对象一样,索引组织表的管理包括创建、删除、修改等操作。其中索引组织表的删除与普通表完全相同,这里不再介绍。
10.5.1 索引组织表的概念
索引组织表(Index-Organized Table,简称IOT)是一种特殊类型的表,它把表中的数据和表的索引存放在同一个段中,并以B树的方式组织在一起,从而可以加快表的查询速度。在索引组织表中必须有一个主键,表中的数据按照主键进行排序,在B树的叶块中同时存储主键列和非主键列。
在传统的表中,表中的数据和索引是分别存放在两个段中的,表中的数据是无序存放的。在索引段中只存放索引列的值和和每行数据的ROWID,并且按照索引列排序。当对表进行查询时,首先根据索引列的值在索引中找到相应的ROWID,再根据ROWID在表中获得对应的数据。如果要经常根据主键列进行查询,可以创建一个索引组织表,按照主键列对该表进行排序,并以B*树的方式组织数据,这样在进行查询时,根据主键列的值可直接获得所需的数据,从而加快查询速度。图10.6表示普通表和索引组织表的区别:
图 10.6 普通表和索引组织表的区别
由于索引组织表是将整行数据都组织在索引中的,因而索引可能十分庞大。为了加快查询速度,可以为每个索引组织表定义为一个“溢出区”。当表中非主键列的数据超过数据块大小的一定比例时,将一部分非主键列移动到溢出区,而主键列和其他一些需要经常访问的非主键列仍然存储在索引中。用户在创建索引组织表时,可以指定溢出区的位置,需要移动到溢出区中的非主键列以及非主键列在数据块中占用空间的比例。
除了数据的组织方式与普通表不同外,索引组织表具有普通表的所有功能,用户可以在表上创建约束、触发器、视图,还可以创建其他索引。