MySQL索引为什么要使用B+树

MySQL索引为什么要使用B+树

1. 二叉搜索树

在这里插入图片描述
缺点:第一个插入的数据始终在最上面,如果我们要查询0006号数据,它将对比5次,将会不能方便快速查找。
所以引入红黑树,红黑树可以解决上面的问题。

2. 红黑树

在这里插入图片描述

我的插入顺序为1~9,顺序插入,得到上面这个数据结构。它每插入一个数据,都会重新平衡,对比得到可能处于中间位置的一个值放到最顶层,这样每一次对比就过滤掉一半的数据。同样查找0006号数据,我们只需要对比两次就可以了。
缺点:如果我们有1千万个数据,也会对比很多次,而且会出现树高的问题,且每插入一个值将进行重平衡,非常的费时。

所以为了解决上述问题,我们引入了B树

3. B树

在这里插入图片描述

我们插入如上图所示的16个数据,可以看到它把之前的每个节点存一个数据变成了存多个数据,底层存数据段的形式。这就解决了红黑树树高的问题。
缺点:有这样一种业务场景:我们现在要取出0008 — 0015区间的所有数据。此时我们需要用0008去匹配,然后用0009去匹配一直到0015。这样每一个数据都走一遍索引去搜索非常的费时间。
所以为了解决B树的这个问题,引入了B+树。

4. B+树

在这里插入图片描述
可以看到同样的15个数据,从数据结构上面看为什么B+树要比B树复杂些呢?
答:这是B树与B+树的区别:B树的具体数据保存在自身所在位置的节点中,B+树的具体数据保存在叶子节点(最底层)上面。
与B树对比的话,B+树多了一个链表。这样我们取区间数据的时候可以不用每一个数据都走一遍索引。降低了空间复杂度。

这就是为什么MySQL要使用B+数作为索引的底层数据结构。

上述所有的图形都是通过以下网站绘制:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值