B树和B+树,到底有啥不一样

更多精彩,访问可乐可乐可:可乐可乐可的主页

在几天前,我天真的以为,知道了B+树,也就是Mysql的树,就能顺利通关,没想到啊没想到,这两天连续问了我两次我的漏洞(另一个是消息队列)

那么回到主题,B树是啥,B+树为啥是plus,这俩有啥区别嘞

小学三年级就学过各种数据结构的我们,肯定会了解一个规律

在大量数据的情况下,树的插入、删除、搜索效率相对其他数据结构更稳定。

这也是数据库,Java中的HashMap使用树作为自己存储数据的数据结构的原因。

如果你了解2-3树等数据结构,你会很轻松,当然没看过也问题不大

首先来看看普通的链表

image-20210331162941116

链表大家都熟悉,我们使用链表,在寻找元素时,是很头痛的,需要我们遍历。

于是我们可以吧其中的几个向上提出一级,作为索引,我们只需要了解当前节点与目标相比,是大还是小,然后选择自己的路径

截屏2021-03-31 下午4.32.54

比如,我们在查询时,首先访问3号,用类似二分的原理,进行访问。

下方的两个数据量继续增加,我们的树变的更复杂

B树与B+树

我们来描述一下这个图,这里有几个重要的点,需要大家注意一下

  1. 每个节点拥有数据
  2. 每个节点组最多3个节点(可以自己设置)
  3. 要想访问最下层数据,需要用树一层层访问下来
  4. 整体的io次数为树的层数

这里存在一个问题,为了达到快速的分配空间,我们存储每个小组都是使用一个数据页(16kb),若想访问到底层数据,需要io多次,其中每个组能存储的数据也非常有限(一个组就16kb)空间,并将数据取出,得到内层数据,然后进行比对。

为了提高性能,Mysql对B树进行了升级,也就是B+树

B+树直接把数据全部存储在底层,上层都为索引(很小,能高效利用空间),底层数据因为在一层嘛,一家人就要整整齐齐,用链表串起来!

B树与B+树|plus

这有什么好处?

  1. 索引部分更轻量,每个组就能放更多的索引,B+树的层数就会降低,io次数降低
  2. 底层链表串起,可以利用顺序读写的优势

讲到这里,不知道各位有没有概念了,B+树升级了存储的方式,把B树的层数打低了,更能高效利用资源。

大师,我悟了,面试再也不怕了呜呜呜

如果你也悟了,留下三连吧hxd

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值