全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

为什么B+树索引比顺序索引文件效率要高?

发布时间:2023-10-11 04:52:37
发布人:xqq

一、为什么B+树索引比顺序索引文件效率要高

B+树进化具有的优点

索引节点没有数据,比较小,能够完全加载到内存中而且叶子节点之间都是链表的结构,所以B+Tree也是可以支持范围查询的,而B树每个节点key和data在一起,则无法区间查找B+树中因为数据都在叶子节点,每次查询的时间复杂度是稳定的,因此稳定性保证了

B+树的检索过程

我们再来看下B+树的检索过程

从B+树的根开始,逐层找到叶子节点。找到叶子节点为对应的数据页,将数据叶加载到内存中,通过页目录的槽采用二分查找的方式先找到一个粗略的记录分组。在分组中通过链表遍历的方式进行记录的查找。

B+树页节点结构

将所有的记录分成几个组, 每组会存储多条记录,页目录存储的是槽(slot),槽相当于分组记录的索引,每个槽指针指向了不同组的最后一个记录我们通过槽定位到组,再查看组中的记录

页的主要作用是存储记录,在页中记录以单链表的形式进行存储。
单链表优点是插入、删除方便,缺点是检索效率不高,最坏的情况要遍历链表所有的节点。因此页目录中提供了二分查找的方式,来提高记录的检索效率。所以B+树索引比顺序索引文件效率要高。

延伸阅读:

二、为什么要从AVL树变成B树

因为内存的易失性。一般情况下,我们都会选择将 user 表中的数据和索引存储在磁盘这种外围设备中。

但是和内存相比,从磁盘中读取数据的速度会慢上百倍千倍甚至万倍,所以,我们应当尽量减少从磁盘中读取数据的次数。

另外,从磁盘中读取数据时,都是按照磁盘块来读取的,并不是一条一条的读。

如果我们能把尽量多的数据放进磁盘块中,那一次磁盘读取操作就会读取更多数据,那我们查找数据的时间也会大幅度降低。

如果我们用树这种数据结构作为索引的数据结构,那我们每查找一次数据就需要从磁盘中读取一个节点,也就是我们说的一个磁盘块。

我们都知道平衡二叉树可是每个节点只存储一个键值和数据的。那说明什么?说明每个磁盘块仅仅存储一个键值和数据!那如果我们要存储海量的数据呢?

可以想象到二叉树的节点将会非常多,高度也会极其高,我们查找数据时也会进行很多次磁盘 IO,我们查找数据的效率将会极低

#it技术干货

相关文章

ptrl在数据结构中代表什么?

ptrl在数据结构中代表什么?

2023-10-11
最长上升子序列空优异解分别是什么?

最长上升子序列空优异解分别是什么?

2023-10-11
哈希表优化的方法有哪些?

哈希表优化的方法有哪些?

2023-10-11
JDK中为什么没有图这一数据结构?

JDK中为什么没有图这一数据结构?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取