数据库使用B+树的原因

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

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

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

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

数据存储和缓存利用率高

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

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

  • 排序方便:B + 树的叶子节点本身就是按照关键字的大小顺序排列的,所以对于需要对数据进行排序的操作,无需额外的排序算法,直接遍历叶子节点链表即可得到有序的数据。
  • 全表遍历高效:如果需要对整个数据库表进行遍历操作,B + 树只需从根节点找到最小的叶子节点,然后沿着叶子节点的链表依次访问即可,操作简单高效。
相关推荐
pusue_the_sun8 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
liang_jy13 小时前
数组(Array)
数据结构·面试·trae
要做朋鱼燕14 小时前
【数据结构】用堆解决TOPK问题
数据结构·算法
秋难降15 小时前
LRU缓存算法(最近最少使用算法)——工业界缓存淘汰策略的 “默认选择”
数据结构·python·算法
Jayyih17 小时前
嵌入式系统学习Day19(数据结构)
数据结构·学习
DdduZe18 小时前
8.19作业
数据结构·算法
PyHaVolask18 小时前
链表基本运算详解:查找、插入、删除及特殊链表
数据结构·算法·链表
1白天的黑夜119 小时前
链表-2.两数相加-力扣(LeetCode)
数据结构·leetcode·链表
花开富贵ii19 小时前
代码随想录算法训练营四十六天|图论part04
java·数据结构·算法·图论
熬了夜的程序员19 小时前
【LeetCode】16. 最接近的三数之和
数据结构·算法·leetcode·职场和发展·深度优先