你是否了解Oracle B树索引 |
本文标签:Oracle B树索引 在向大家详细介绍Oracle B树索引之前,首先让大家了解下非唯一索引中,然后全面介绍Oracle B树索引 。Oracle B树索引中不存在非唯一的条目 。 在非唯一索引中,Oracle会把rowid作为一个额外的列追加到键上,使得键唯一 。 Exp:create index I on T( x , y ) ,从概念上讲就是Create unique index I on T(x , y , rowid) 。Oracle会首先按索引键值排序,然后再按照rowid升序排序 。 在唯一索引中,数据只按索引键值排序 。 1.大多数情况下,Oracle B树索引的高度都是2或者3,所以一般情况下,在索引中找到一个键只需要2或3次I/O 。 2.Oracle B树索引所有叶子块都应该在同一层上,并且叶子节点实际上都是双向链表,这样在进行索引区间扫描(index range scan)的时候,只需通过叶子节点的向前或者向后就可以了,无需再对索引结构进行导航 。 3.适当对Oracle B树索引存在重复值的列进行压缩, 可以增加缓存命中率,使I/O数减少,因为 4.Oracle B树索引的反向键索引主要用于缓解索引右侧缓冲区忙等待 。适合用于类似于sequence产生的PK主键上,因为这些列不太会需要使用区间扫描,也就是不会用到max(PK),min(PK),between and或者where PK < 200等查询 5.如果在查询中会有order by colum1 asc,column2 desc, 试着在创建索引时create index I on T(colum1 asc,column2 desc) , 因为Oracle INDEX默认是DESC排序,在索引中排序总比在磁盘中排序好得多 。 6.适合Oracle B树索引使用的2种情况: 7.索引是按索引键顺序存储,索引会按键的有序顺序进行访问 。索引指向的块则随机存储在堆中 。 8.建议:在thin表中使用Oracle B树索引查询<2-3%的列,fat表中<20-25%的列 。 |