更多精彩,访问可乐可乐可:可乐可乐可的主页
在几天前,我天真的以为,知道了B+树,也就是Mysql的树,就能顺利通关,没想到啊没想到,这两天连续问了我两次我的漏洞(另一个是消息队列)
那么回到主题,B树是啥,B+树为啥是plus,这俩有啥区别嘞
小学三年级就学过各种数据结构的我们,肯定会了解一个规律
在大量数据的情况下,树的插入、删除、搜索效率相对其他数据结构更稳定。
这也是数据库,Java中的HashMap使用树作为自己存储数据的数据结构的原因。
如果你了解2-3树等数据结构,你会很轻松,当然没看过也问题不大
首先来看看普通的链表
链表大家都熟悉,我们使用链表,在寻找元素时,是很头痛的,需要我们遍历。
于是我们可以吧其中的几个向上提出一级,作为索引,我们只需要了解当前节点与目标相比,是大还是小,然后选择自己的路径
比如,我们在查询时,首先访问3号,用类似二分的原理,进行访问。
下方的两个数据量继续增加,我们的树变的更复杂
我们来描述一下这个图,这里有几个重要的点,需要大家注意一下
- 每个节点拥有数据
- 每个节点组最多3个节点(可以自己设置)
- 要想访问最下层数据,需要用树一层层访问下来
- 整体的io次数为树的层数
这里存在一个问题,为了达到快速的分配空间,我们存储每个小组都是使用一个数据页(16kb),若想访问到底层数据,需要io多次,其中每个组能存储的数据也非常有限(一个组就16kb)空间,并将数据取出,得到内层数据,然后进行比对。
为了提高性能,Mysql对B树进行了升级,也就是B+树
B+树直接把数据全部存储在底层,上层都为索引(很小,能高效利用空间),底层数据因为在一层嘛,一家人就要整整齐齐,用链表串起来!
这有什么好处?
- 索引部分更轻量,每个组就能放更多的索引,B+树的层数就会降低,io次数降低
- 底层链表串起,可以利用顺序读写的优势
讲到这里,不知道各位有没有概念了,B+树升级了存储的方式,把B树的层数打低了,更能高效利用资源。
大师,我悟了,面试再也不怕了呜呜呜
如果你也悟了,留下三连吧hxd