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
全部博文(166)
分类: 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的行。