10.3.2 反向索引

B树索引是最经常用的索引形式。在一个表中,索引列上的数据越随机,就越能体现B树索引的优越性。然而如果表中某个列上的数据已经有序,或者基本有序,那么在这个列上建立B*树索引就没有什么意义了。在这种情况下,如果按照该列上相反顺序的值建立索引,那么可以降低索引的层次,从而达到创建索引的目的。

实际上索引是一种特殊形式的B树索引,只不过是把索引列上的值按照相反的顺序存储在索引中,从而把该列上数据的有规律分布转换为无规律的分布,然后按照转换后的数据创建一个B树索引。图10.3表示反向索引的构成。

如果表中一个列上的值已经有序,或者基本有序,那么在该列上建立索引时,应该选择反向索引。创建反向索引的方法与创建B*树索引的方法类似,只是需要使用REVERSE关键字进行区别。例如,假设要在表emp的empno列上创建反向索引,可以执行下面的语句:


SQL>CREATE INDEX emp_idx1 ON emp(empno)REVERSE;


需要注意的是,反向索引并不像B*树索引那样可以直接起作用。为了使用反向索引,首先要对表进行分析,收集统计它的数据。例如,为了用反向索引emp_idx,应该执行以下语句对表emp进行分析:


SQL>ANALYZE TABLE emp COMPUTE STATISTICS;


figure_0284_0090

图 10.3 反向索引