《MySQL系列-InnoDB引擎33》索引与算法-B+树

B+树

B+树和二叉树、平衡二叉树一样,都是经典的数据结构。B+树由B树和索引顺序访问方法(ISAM,也是MyISAM引擎最初参考的数据结构),但是现实使用过程中几乎没有使用B树得情况了。

B+树是为磁盘或其他直接存取辅助设备设计的一种平衡查找树。在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,由各叶子节点指针进行连接。先看一个B+树,高度为2,每页存4条记录,扇出为5.

如下图所示,所有记录都在叶子节点上,并且顺序存放的,如果用户从最左边叶子节点开始遍历,那么得到的键值是:5、10、15、20、25、30、50、55、60、65、75、80、85、90。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tW48kXa0-1679807421730)(017.png)]

1 B+树的插入操作

B+树的插入必须保证插入后叶子节点的记录依然有序,同时考虑插入到B+树的三种情况,每种情况可能会导致不同的插入算法:

Leaf Page满 Index Page满 操作
No No 直接将记录插入到叶子节点
Yes No 1.拆分leafPage 2.将中间的节点放到index page总 3.小于中间节点的记录放左边 4.大于或等于中间节点的记录放右边
Yes Yes 1.拆分leafPage 2.小于中间节点的记录放左边 3.大于或等于中间节点的记录放右边 4.拆分indexPage 5.小于中间节点的记录放左边 6.大于中间节点的记录放右边 7.中间节点放上一层indexpage

2 B+树的删除操作

B+树使用填充因子来控制树的删除变化,50%是填充因子可设的最小值。B+树的删除操作同样必须保证删除后叶子节点中的记录依然排序,同插入一样,B+树的删除操作同样需要考虑以下三种情况,与插入不同的是,删除根据填充因子的变化衡量:

叶子节点小于填充因子 中间节点小于填充因子 操作
No No 直接将记录从叶子节点删除,如果该节点还是index page节点,用该节点的右节点代替
Yes No 合并叶子节点和它的兄弟节点,同时更新index page
Yes Yes 1.合并叶子节点和它的兄弟节点 2.更新index page 3.合并index page和它的兄弟节点

猜你喜欢

转载自blog.csdn.net/m0_51197424/article/details/129778339