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的合并操作
- B+树索引算法
- 理解B+树算法和Innodb索引
- 理解B+树算法和Innodb索引
- 理解B+树算法和Innodb索引
- 理解B+树算法和Innodb索引
- B+树算法与Innodb引擎索引
- MySQL---索引算法B+/B-树原理(二)
- MySQL---索引算法B+/B-树原理(一)
- MySQL索引背后的数据结构及算法原理(b+树)
- MySQL索引背后的数据结构及算法原理(b+树)
- 数据库索引 - B树索引
- 【索引分类】B树索引
- B*树索引
- B*树索引
- B+树索引-【高扇出性】
- B-树索引
- 数据库索引--B树
- B树索引
- JAVA实现在excel插入图片(POI模式)
- 主成分分析(Principal components analysis)-最大方差解释
- Exynos4412 Uboot 移植(六)—— 相关知识补充
- iOS mask 层和 CAShapeLayer层中间挖去一部分的 源码分析
- sendmail使用
- B+树索引算法
- 【nodejs】npm常用命令
- LeetCode 278. First Bad Version
- static的作用
- git使用一览
- Android开发之开机启动没有界面的应用程序
- python 报错TypeError: 'range' object does not support item assignment,解决方法
- 源码分析shiro认证授权流程
- SAS学习(1)