B+树索引算法

来源:互联网 发布:windows无法启动怎么办 编辑:程序博客网 时间:2024/04/30 13:12

B+树是B树的变体,也是一种多路搜索树

1.非叶子节点的子树指针与关键字个数相同;

2.为所有叶子节点增加一个链指针;

3.所有关键字都在叶子节点出现;

B+树插入新元素时,可能会遇到3种情况

Leaf page full

Index page full

操作

NO

NO

直接将记录插入叶节点

YES

NO

1.       拆分leaf page

2.       将中间节点放入index page中

3.       小于中间节点的记录放在左边

4.       大于等于中间节点的记录放在右边

Yes

Yes

1.       拆分leaf Page

2.       小于中间节点的记录放在左边

3.       大于等于中间节点放在记录右边

4.       拆分index Page

5.       小于中间节点的记录放在左边

6.       大于中间节点的记录放在右边

7.       中间节点放在上一层 index page


下面演示B+树结构,高度为2,每页可存放4条记录

1)插入28满足第一种情况leaf page和index page都没满直接插入即可(B+树插入保证插入后叶节点的记录依然是顺序的)

2)插入70满足第二种情况,leaf page已满,index page还没满,50,55,60,65,70的中间值为60由于每页最多放4条记录需要拆分leaf page(双向链表一直存在没画出)

插入95 满足第三种情况75,80,85,90,95中间值是85放在index page(已满)60位index page的中间值放在上层index page这样一层index变成了60第二层index page变成了

25,50,75,85插入95后如下图

B+树的删除操作

B+树使用填充因子来控制数的删除变化。填充因子可以设置的最小值为50%。B+树的删除操作同样保证删除后叶节点的记录依然排序。

根据填充因子的变化,B+树删除操作也分为3种情况

Leaf Page Below Fill Factor

Index Page Below Fill Factor

操作

NO

NO

直接将记录从叶节点删除,如果该节点还是Index Page的节点,则用该节点的右节点代替

Yes

NO

合并叶节点及其节点,同时更新Index Page

Yes

Yes

1.       合并叶节点及其兄弟节点

2.       更新Index Page

3.       合并Index Page及其兄弟节点


删除70符合第一种情况

删除25后和上面一样不同的是该值还是index page中的值。因此在删除Leaf Page中的25后,还需要将25的右兄弟节点28更新到Index Page中


删除Leaf page键值为60的记录后,其填充因子小于50%。需要做合并操作。同样在删除Index page中相关记录后需要做Index Page的合并操作




0 0
原创粉丝点击