About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc
全部博文(169)
分类: Oracle
2020-07-23 17:06:09
1)B*tree索引:默认的索引类型,最常使用
-Index-organized tables索引组织表:相对于堆表的无序,IOT按照主键排序,索引即是表,
表即是索引。
-Reverse key indexes反转键索引:按照字节反转存储的索引,可解决索引块争用问题
-Descending indexes降序索引:按照键值降序存储的索引,默认升序
-B-tree cluster indexes聚簇索引:专门为cluster定义的索引,很少使用
2)-Bitmap和bitmap join indexes:位图索引和B*tree不同,位图索引的一个index entry使用bitmap指向多行,而B*tree一个index entry指向单行。Bitmap join indexes是针对多张表的Join建立的索引,避免实际JOIN,从而提高效率。位图索引适合OLAP场景,索引列值的选择性不好,数据只读或者很少做DML操作。
3)-Function-based indexes:函数索引,可以是B*tree或Bitmap,基于表达式或函数运算创建的索引。
4)-Partition
indexes:分区索引,利用分区技术建立的索引,提高效率,便于维护。
5)-Application domain indexes:应用域索引是用户针对应用定制的索引,比如全文索引。
每个B *树索引都有根块作为起始点。 根据条目的数量,有多个分支块可以有多个叶块。 叶块包含索引的所有值加上指向相关数据段中的行的ROWID。
上一个和下一个块指针连接叶块,以便它们可以从左到右遍历(反之亦然)。索引始终是平衡的,它们从上到下增长。 在某些情况下,平衡算法会导致B *树的高度不必要地增加。 可以重组索引。 这是由ALTER INDEX ... REBUILD |完成的 COALESCE命令。
B *树索引的内部结构允许快速访问索引值。 系统可以在从索引叶块中检索到地址(ROWID)后直接访问行。
1)B*tree有两种类型的block:branch blocks用于搜索、leaf blocks存储数据,其中最上面的root branch。
2)Branch blocks在两个键值之间通过最小化的前缀存储,通过指针指向子块。比如根块条目0..40指向对应分支块,它包含0..10和11..19两个条目,这两个条目通过指针指向对应的leaf block。
3)从root branch到每个leaf block的高度是一致的。
4)Leaf blocks按照索引列顺序加上rowid存储(key value,rowid),用于定位对应的行。Leaf blocks之间是双向链表结构。索引的有序性特点,经常用于避免SQL语句中的排序。
5)B*tree不存储全为NULL的行。