Reverse Key Indexes反向索引
A reverse key index is a type of B-tree index that physically reverses the bytes of each index key
while keeping the column order.
反向索引就是将正常的键值头尾调换后再进行存储,这样做可以高效地打散正常的索引键值在索引叶块中的分布位置.
反向索引适用场合:索引叶块成为热点块时使用通常使用数据时都比较集中在一个连续的数据范围内,比如批量插入操作,在使用正常的索引时就很容易发生索引叶子块过热的现象,严重时会导致系统性能下降.
为什么是最右端的leaf block?
在普通的B树索引中,数据库按顺序插入索引值,如果索引键值被同时插入到B树的叶块,那叶块可能会成为一个序列化点.比如,你创建了具有以下值的主键(从序列取值):
1 0 1
1 0 2
1 0 3
在普通的B树索引中,这些顺序的索引值都存储在最右侧的同一索引块中,这种存储方式加剧了对该块的争用.
在反向索引中,Oracle 数据库将以下方式插入相同的值:
1 0 1
2 0 1
3 0 1
从上可以看出,主键的实际值是连续排列的,但索引值却不是连续排列的.
使用反向索引的优点:降低索引叶子块的争用,减少热点块,提高系统性能.
使用反向索引的缺点:由于反向索引结构自身的特点,如果系统中经常使用范围扫描进行读取数据的话,如在where 子句中使用between and 语句或比较运算符>,<等,反向索引将不适用,此时会出现大量的全表扫描的现象,反而会降低系统的性能.