频道栏目
读书频道 > 数据库 > Oracle > 高并发Oracle数据库系统的架构与设计
2.2.1 B树索引内部结构
2014-11-28 14:34:51     我来说两句
收藏   我要投稿
Foreword?推 荐 序 一文以载道 书以自娱侯松的新书付梓,嘱我为序,品读精华章节,览其前言,心有所感,遂言而记之。关于写作之因由,于作者来说,一直是最为重要的缘起。认真地写作一本好书,其中的坚持、勤  立即去当当网订购
我们已经了解到B树索引是一种典型的树形结构,其包含的组件主要是:
根节点:只有一个根节点,是位于树的最顶端的分支节点;
分支节点:存储指针指向索引里其他的分支节点或者叶节点;
叶子节点:存储索引条目(包括索引条目头信息、索引键值长度、索引键值,以及ROWID相关信息)直接指向表里的数据行。
 
下面通过一张示意图来描述一下这种内部结构,如图2-7所示,就分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(默认是ASC升序排列,也可以在创建索引时指定为DESC降序排列)。每个索引条目均由两个字段组成,第一个字段表示当前该分支节点块下所指向的叶节点块中所包含的开始键值(对升序排序的索引来说,就是最小键值),第二个字段为指向叶节点块地址的指针。在一个分支节点块中所能容纳的记录行数由数据块大小以及索引键值的长度决定。在本例中,对于根节点块来说,包含三个指针,分别为(1 B1)、(100 B2)、(200 B3),它们指向三个分支节点块。其中的1、100和200分别表示这三个分支节点块所指向的开始键值,而B1、B2和B3则表示所指向的三个分支节点块的地址。
 
对于叶子节点块来说,其所包含的索引条目与分支节点一样,都是按照顺序排列的。每个索引条目也包含两个字段。第一个字段表示索引的键值,对于单列索引来说是一个值,而对于复合索引来说则是多个值组合在一起的。第二个字段表示该键值所对应的数据行的ROWID,该ROWID是数据行在表里的物理地址。
 
当有新的索引键值插入的时候,索引会判断新键值的排序位置。如果新键值大于目前索引存储的最大值,则会将新键值插入到最右侧的叶节点块(L8)上,如果新键值为198,则会将其插入到节点块L6上。如果对应叶节点块已满,则会分裂出新的叶节点块,分支节点块满了,同样会分裂出新块。
索引这个特点是不同于表的,DML操作过程中,对索引维护成本是比较大的,所以我们需要定期地去分析索引的结构,保证其高效支持查询的能力。
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.2 索引与排序
下一篇:2.2.2 输出排序
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站