Mysql索引为何使用B+树结构

MySQL的索引机制中,有一点可谓是路人皆知,既默认使用B+树作为底层的数据结构,有人会说树结构是以二分法查找数据,所以会在很大程度上提升检索性能,这点确实没错,但树结构有那么多,但为什么要选择B+树呢?而不选择二叉树、红黑树或B树呢?下面一起聊一聊这个话题。

为何不选择二叉树?

二叉搜索树是遵守二分搜索法实现的一种数据结构,它具有下面特点:

  • 任意节点的左子树不为空时,左节点小于根节点;
  • 右节点不为空时,右节点大于根节点;
  • 任意子树也是二叉搜索树;

依次存入数据,如果数据是递增的,则原二叉树退化为链表。

为何不选择红黑树?

相比于二叉树,红黑树则进一步做了优化,它是一种自适应的平衡树,会根据插入的节点数量以及节点信息,自动调整树结构来维持平衡

①虽然对比二叉树来说,树高有所降低,但数据量一大时,依旧会有很大的高度。
②每个节点中只存储一个数据,节点之间还是不连续的,每次磁盘IO只能读取一个数据。

为何不选择B树?

B树和红黑树相比,其单节点可容纳多个数据,就能在大程度上改善其性能,使B树的高度远小于红黑树的高度。

我们仔细观察可以知道B树的叶子节点直接是没有指针的,但是日常查询中包含了大量的范围查询,所以当出现范围查找的时候,会出现多次的IO查找。

①虽然对比之前的红黑树更矮,检索数据更快,但对于大范围查询的需求,依旧需要通过多次磁盘IO来检索数据。

为何选择B+树?

B+树是在B树的基础进一步优化,一方面节点分为了叶节点和子节点两类,另一方面叶子节点之间存在单向链表指针

  • 叶节点不存储实际数据,主要用于索引和加速查找;
  • 叶子节点存储数据,所有叶子节点通过链表连接,便于范围查询
  • 这种设计相对于B树相同高度能够存储更多数据

其实MySQL底层真正的索引结构还对叶子节点之间的指针进行了优化,B+树叶子节点的单向指针无法支持倒序查询,因此MySQL针对单向指针优化成了双向指针,也就是双向链表结构,在某些业务场景下又能进一步提升整体性能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法小生Đ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值