数据库使用B+树的原因

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

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

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

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

数据存储和缓存利用率高

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

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

  • 排序方便:B + 树的叶子节点本身就是按照关键字的大小顺序排列的,所以对于需要对数据进行排序的操作,无需额外的排序算法,直接遍历叶子节点链表即可得到有序的数据。
  • 全表遍历高效:如果需要对整个数据库表进行遍历操作,B + 树只需从根节点找到最小的叶子节点,然后沿着叶子节点的链表依次访问即可,操作简单高效。
相关推荐
长沙火山44 分钟前
9.ArkUI List的介绍和使用
数据结构·windows·list
AAAA劝导tx2 小时前
List--链表
数据结构·c++·笔记·链表·list
格格Code2 小时前
八大排序——冒泡排序/归并排序
数据结构·算法·排序算法
fantasy_42 小时前
LeetCode238☞除自身以外数组的乘积
java·数据结构·python·算法·leetcode
Phoebe鑫3 小时前
数据结构每日一题day12(链表)★★★★★
数据结构·算法·链表
八股文领域大手子4 小时前
深入浅出限流算法(三):追求极致精确的滑动日志
开发语言·数据结构·算法·leetcode·mybatis·哈希算法
新时代苦力工5 小时前
处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法
java·数据结构·list
一捌年5 小时前
java排序算法-计数排序
数据结构·算法·排序算法
乌鸦9446 小时前
《数据结构之美--二叉树》
数据结构·#二叉树
泽02029 小时前
数据结构之排序
数据结构·算法·排序算法