B-Tree索引

原文:http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.adref.doc/adref235.htm

这部分B-tree索引页的结构的一般信息。是对感兴趣的读者的一个概况。更多信息请参考IBM Informix指南。

B-Tree定义

数据库用B-tree数据结构组织索引,图1显示了一个完整的B-tree索引是由下面三种不同类型的索引页或结点组成的。

 

1 B-tree结构图

*一个根节点

根节点包含指向分支节点的指针。

*两个或两个以上的分支节点

一个分支结点包含指向叶子结点或其他的分支节点的指针。

*很多的叶子结点

一个叶子结点包含索引项和水平地指向其他叶子结点的指针。

每一个结点都有各自不同的功能,下面介绍各结点在索引中的功能。

 

索引项

索引的基本单位是索引项。一个索引项包含一个key值,它代表某个特定行的索引列。并且包含数据库用来在数据页中定位行的rowid信息。

结点

结点是存有一组索引项的索引页(好像翻译的不对)

 

索引的逻辑存储

这部分概述数据库任何创建和填充索引

根和叶子结点的创建

         当你为一个表创建索引时,数据库只允许一个索引页。这页代表根结点并且直到你插入数据到表中都是空的。

         开始时,从功能上来说,根节点和叶子节点一样。你往数据库表中插入一条记录,数据库在根节点上创建并添加一个索引项。图2说明了一个根节点在他被填充前是任何出现的(?

 

2 根结点

当根结点充满了索引项时,数据库根据以下步骤分裂根结点:

1,创建两个叶子结点

2,移动大约一半的根结点项给每一个新创建的叶子结点

3,把叶子结点的指针放入根结点

当你添加新行到数据库表中,数据库添加索引项到叶子结点。当叶子结点满时,数据库创建新的叶子结点,移动部分索引项到新的结点,并在根结点添加一个指向新叶子结点的指针。

         例如,假定叶节点3要满了。数据库管理系统添加另一个叶子结点。数据库管理系统移动部分叶节点3的记录到新的叶节点,如图3所示。

 

 

3 叶节点3满后创建叶节点3

分支结点创建

最终,当你在数据库表中添加记录时,数据库管理系统用指向现有的叶子结点指针填充根结点。当根结点分裂另一个叶子结点,并且根结点没有空间填充其他指针时,就会发生下面的情况。

         数据库管理系统分裂根结点并划分其内容给两个新创建的分支(不知道如何翻译)。当索引列添加后,越来越多的叶子结点分裂了,导致数据库管理系统添加了更多的分支,最终,根结点填充了指向这些分支结点的指针。当此发生时,数据库管理系统再次分裂根结点。并在根结点和较低层次的分支创建另外的分支。最终结果是一个4层的树,一个根结点,2个分支层次和一个叶层。B-tree数据结构可以继续生长下去直到最大层次20层。

         分支结点可指向其他在其下层的分支或者叶子结点。在图4中,分支结点只指向叶子结点。左侧分支结点中第一个结点项包含和最左侧叶结点最大项一样的key值和一个结点指向他,第二个包含下一个叶子结点最大项和一个指向他的结点。第三个只包含一个指向下层叶结点的指针。随着索引的增长,第三索引项能在索引生命周期内包含真实key值。

 

 

4 分支结点

 待续……

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值