mysql b 树 叶子_常见问题:MySQL/B+树

平衡二叉树

此前讲红黑树时也提到了平衡二叉树,红黑树和AVL树都是能保证树不退化的平衡二叉树,平衡二叉树采用二分思想组织数据,能大大提高单点查找数据的效率,其组装过程略。

作为对比,此处也列出平衡二叉树规则

节点最多有两个子节点。

节点大于其左子节点小于其右子节点。

树的左右两边层级最多相差不大于1。

但平衡二叉树的性能和层级成反比,如果层级过多,则影响效率。因此数据库使用平衡二叉树组织数据过于低效,产生了B树。

B树

结构

B树即多路平衡查找树,也叫多叉树,其规则如下:

递增排序,左小右大。

一个节点的子节点数在(1,m]且m>=2。

一个节点的关键字数量为[(m-1)/2,m)。

所有叶子节点在同层。

7d55a0fd6f25becdb1ccf96489f3a0ec.png

查询

由于B树采用左小右大的原则,可以快速定位数据所在的区间,能够快速定位到单点。

插入

根据区间正常插入到叶子节点。

所在节点元素数超过m-1时,拆分,中间元素提到父节点,左边元素构成一个叶子节点,右边元素构成一个叶子节点。若引起父节点溢出,则递归拆分。

删除

根据区间正常定位到关键字,删除。

所在节点元素数小于(m-1)/2,从子节点取点补缺,若子节点没有可取点,则从父节点取点补缺,若引起父节点元素数不足,递归此问题。

除了有效减少数据的层数时,B树可以把块大小设置为4k,这样和磁盘块大小相同,可以快速将一个节点的数据全部取出,提高了性能。

B+树

相对于B树,B+树将所有元素都存储到叶子节点,非叶子节点保存的是叶子节点首条数据的引用,用于检索,因此B+树的叶子节点数=关键字数。此外,B+树的每个叶子节点,都包含着指向相邻叶子节点的指针。

B+树的插入和B树几乎一致,只是拆分时不会将元素提到叶子节点,而是将元素的引用提到叶子节点(左节点包含m/2个元素),并递归拆分。

删除时,若删除后节点元素不足,优先从兄弟节点借一个元素,并更新父节点的引用。若兄弟节点不能借出节点,则将两节点合并为同一节点,并更新父节点引用。引起父节点元素不足时,递归操作,当根节点只有一个子节点时则进行降级,引用下移并删除节点。

B+树有以下好处:

B+树非叶子节点仅存储引用,相对很小,一次性读入内存的关键字多(类似KV分离的好处)。

B+树所有元素都在叶子节点,查询效率稳定。

叶子节点指向相邻兄弟节点,可以快速scan。

B*树

B树在B+树基础上,将非叶子节点也加上指向兄弟节点的指针,并定义非叶子节点关键字个数至少为(2/3)m,进而获取了更高的空间利用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值