B树索引概念
程序员文章站
2022-05-18 16:55:03
...
一、B树索引组件
B树索引是一个典型的树结构,其包含的组件主要是:
1、根节点(最顶端的索引分支块):包含指向其他索引分支块或索引叶子块的指针和索引键值列。
2、索引分支节点(索引分支块):包含指向其他索引分支块或索引叶子块的指针和索引键值列。
3、索引叶子节点(索引叶子块):索引叶子块包含被索引键值和用于定位该索引键值所在的数据行在表中实际物理存储位置的ROWID。
(这里得指针是指相关索引分支块和索引叶子块的块地址RDBA)
二、Oracle访问B-Tree索引顺序
ROOT(LMC B C 索引根节点)-> (LMC AD AK索引分支块) ->(索引叶子块)
ROOT(LMC B C 索引根节点)->(LMC BI BO 索引分支块)-> (索引叶子块)
B-Tree索引包含2种数据块:索引分支块、索引叶子块。
三、对比唯一性索引和非唯一索引
索引叶子块包含被索引键值和用于定位该索引键值所在数据行的表中实际物理存储位置的ROWID。对于唯一性B树索引而言,ROWID是存储在索引行的行头,所以此时Oracle并不需要额外存储该ROWID的长度。而对于非唯一性B索引而言,ROWID被当做额外的列与被索引的键值列一起存储,所以此时Oracle既要存储ROWID。同时又要存储其长度,这意味着,同等条件下,唯一性B树索引要比非唯一性B树索引节省叶子块的存储空间。对于非唯一索引而言,B树索引的有序性体现在Oracle会按照被索引键值和相应的ROWID来联合排序。Oracle里的索引叶子块是左右互联,即相当于有一个双向指针链表把这些索引叶子块互相连接在一起。
四、B树索引的优势
1、所有叶子块都在同一层,即它们距离所有根节点的深度(B-LEVEL)是相同的,这也意味着访问索引叶子块的任何一个索引键值所花费的时间几乎相同。
2、Oracle会保证所有的B树索引都是自平衡的,即不可能出现不同的索引叶子块不处于同一层的现象。
3、通过B树索引访问表里行记录的效率并不会随着相关表的数据量增加而显著降低,即通过走索引访问数据的时间是可控的、基本稳定的,这也是走索引和走全表扫描的最大区别。
五、Oracle访问索引成本
Oracle访问索引的成本分为两个部分:
1、访问B-Tree索引的成本(从根节点定位到相关分支块,在到相关叶子块,最后对这些叶子块进行扫描,找到索引键值和用于定位该索引键值所在的数据行在表中实际物理存储位置的ROWID)。
2、回表(根据得到的ROWID在回表扫描数据行所在数据块)
上一篇: B树的插入操作