数据库使用B+树的原因

减少磁盘 I/O 次数,提高查询效率

  • 节点存储容量大 :B + 树的非叶子节点存储索引信息,不存储实际数据(数据都存储在叶子节点),所以相同空间大小的节点,B + 树可以存储更多的索引关键字。
  • 范围查询高效 :B + 树的叶子节点之间通过指针相互连接 ,形成了一个有序的链表。在进行范围查询时,只需要找到范围的起始位置,然后沿着叶子节点的链表顺序遍历即可,无需像 B 树那样在树的不同层级中反复查找,提高了范围查询的效率。

数据插入和删除操作效率较高

  • 节点分裂和合并代价小 :B + 树在插入和删除数据时,对树的结构调整相对较少。当插入数据导致节点关键字数量超过上限时,B + 树只需将节点分裂成两个,并将中间关键字提升到父节点;删除数据导致节点关键字数量不足时,可以与相邻节点合并。这种操作主要集中在叶子节点层,对树的上层结构影响较小,维护树的平衡相对容易,操作的代价也相对较小。
  • 顺序插入性能好 :数据库中的数据通常是批量插入的,B + 树的叶子节点之间的链表结构使得顺序插入数据非常高效。新插入的数据可以直接添加到叶子节点的链表末尾,不需要频繁地调整树的结构,大大提高了数据插入的速度。

数据存储和缓存利用率高

  • 数据存储紧凑 :B + 树将所有的数据存储在叶子节点,并且叶子节点之间通过链表连接,使得数据在磁盘上的存储更加紧凑。这样在读取数据时,可以一次性读取更多连续的数据块,充分利用磁盘的预读功能,提高数据的读取速度。
  • 缓存命中率高 :数据库系统会使用缓存来存储经常访问的数据,以减少对磁盘的访问。B + 树的结构使得相邻的数据在磁盘上的物理位置也相邻 ,当访问一个叶子节点的数据时,与其相邻的叶子节点数据也很可能被一起加载到缓存中,**提高了缓存的命中率,**进一步加快了后续的查询速度。

支持高效的排序和遍历操作

  • 排序方便:B + 树的叶子节点本身就是按照关键字的大小顺序排列的,所以对于需要对数据进行排序的操作,无需额外的排序算法,直接遍历叶子节点链表即可得到有序的数据。
  • 全表遍历高效:如果需要对整个数据库表进行遍历操作,B + 树只需从根节点找到最小的叶子节点,然后沿着叶子节点的链表依次访问即可,操作简单高效。
相关推荐
暴力求解38 分钟前
数据结构---栈和队列详解(上)
开发语言·数据结构·c++
小胖xiaopangss2 小时前
栈的压入弹出序列--牛客
数据结构·c++·算法
程序员莫小特2 小时前
老题新解|求三角形面积
开发语言·数据结构·c++·算法·信息学奥赛一本通
懒羊羊不懒@3 小时前
数据结构绪论
数据结构
终焉代码4 小时前
【C++】map与set底层结构——红黑树
开发语言·数据结构·c++
悠哉悠哉愿意4 小时前
【数据结构与算法学习笔记】双指针
数据结构·笔记·python·学习·算法
MoRanzhi12035 小时前
5. Pandas 缺失值与异常值处理
数据结构·python·数据挖掘·数据分析·pandas·缺失值处理·异常值处理
Cx330❀6 小时前
《C++ STL:vector类(下)》:攻克 C++ Vector 的迭代器失效陷阱:从源码层面详解原理与解决方案
开发语言·数据结构·c++·经验分享·算法
bawangtianzun6 小时前
树的重心与直径 性质
数据结构·c++·学习·算法
code monkey.8 小时前
【探寻C++之旅】第十六章:unordered系列的认识与模拟实现
数据结构·c++·stl