为什么要用B+树

B+树的优势

支持范围查询:B+树在进行范围查询时,只需要从根节点一直遍历到叶子节点,因为数据都存储在叶子节点上,而且叶子节点之间有指针连接,可以很方便的进行范围查询

支持排序:B+树的叶子节点按照关键字顺序存储,可以快速支持排序操作,提供排序效率

存储更多的索引数据:因为它的非叶子节点只能存储索引关键字,不存储实际数据,因此可以存储更多的索引数据

在节点分裂和合并时,IO操作少:B+树的叶子节点的大小是固定的,而且节点的大小一般都会设置为一页的大小,这就使得节点分裂和合并时,IO操作很少,只需读取和写入一页

有利于磁盘预读:由于B+树的节点大小是固定的,因此可以很好的利用磁盘预读特性,一次行读取多个节点到内存中,可以减少IO操作次数,提高查询效率

有利于缓存:B+树的非叶子结点只存储执行子节点的指针,二步存储数据,这样可以使得缓存能搞容纳更多的索引数据,从而提供缓存的命中率,加快查询速度

为什么不使用B数和红黑树

B+树只有叶子节点存储数据,而非叶子节点不存储数据,可以存储更多的索引数据

节点大小固定,可以存储更多的索引数据

叶子节点之间是双向链表链接的,可以很方便的进行范围查询

叶子节点按照关键子顺序存储,更好的支持排序

所以,使用B+树实现索引有很多好处,比如我们前面提到的支持范围查询、有利于磁盘预读、有利于优化排序等等。而这些是红黑树和B树做不到的

相关推荐
辰烨chenye7 分钟前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考39 分钟前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
玖玥拾1 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
知无不研2 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
a187927218313 小时前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并
2601_962297483 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
辰烨chenye4 小时前
LeetCode Hot 100 题解 · 子串篇
算法·leetcode·职场和发展
辰烨chenye4 小时前
LeetCode Hot 100 题解 · 堆篇
java·算法·leetcode
手写码匠4 小时前
华为云Flexus+DeepSeek征文|DeepSeek 应用监控告警体系实战:从“用户投诉才知道“到“故障前就发现“
人工智能·深度学习·算法·aigc
shehuiyuelaiyuehao5 小时前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法