💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 持续学习,不断总结,共同进步,活到老学到老
- 人生的本质是追寻自我的提升,包括思想、能力、意志等等。
- 直面变化,找到背后更基础的东西,更基础的东西是用户的需求。
- 我们的成功是我们的现在和将来决定的。今天和明天已经由昨天决定,你还可以决定后天。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
众多的数据结构在逻辑层面可分为:线性结构 和 非线性结构。
- 线性结构有:数组、链表,基于它们衍生出的有哈希表(哈希表也称散列表)、栈、队列等。
- 非线性结构有:树、图。
- 还有其他数据结构如:跳表、位图 也都由基础数据结构演化而来,不同的数据结构存在即都是为了解决某些场景问题。
索引虽然存储在磁盘上,但使用索引查找数据时,可以从磁盘先读取索引放到内存中,再通过索引从磁盘找到数据;再然后将磁盘读取到的数据也放到内存里。索引就让磁盘和内存强强联手.
b 树(balance tree)和 b+树应用在数据库索引,可以认为是 m 叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢?
因为我们要考虑磁盘 IO 的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少 IO 次数,对于树来说,IO 次数就是树的高度,而“矮胖”就是 b 树的特征之一,它的每个节点最多包含 m 个孩子,m 称为 b 树的阶。
为什么不用 B 树呢?
B+树,是 B 树的一种变体,查询性能更好。
B+树相比于 B 树的查询优势:
- B+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”。B 树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致 IO 操作变多,查询性能变低;
- B+树查询必须查找到叶子节点,B 树只要匹配到即可直接返回。因此 B+树查找更稳定(并不慢),必须查找到叶子节点;而 B 树,如果数据在根节点,最快,在叶子节点最慢,查询效率不稳定。
- 对于范围查找来说,B+树只需遍历叶子节点链表即可,并且不需要排序操作,因为叶子节点已经对索引进行了排序操作。B 树却需要重复地中序遍历,找到所有的范围内的节点。
总结选用 B+树的原因:
- 要尽少在磁盘做 I/O 操作。
- 要能尽快的按照区间高效地范围查找。
- 等值查询:哈希、跳表,不适合范围查询。
- 范围查询:树结构,但是会带来磁盘 IO 的情况,也会造成树过高的问题,所以衍生出 B 树,
- 而 B 树又因为范围查询的情况下, 会一直到根节点再到叶子节点这样查询。所以延伸出了 B+树,解决范围查询的情况。
- 查询效率,B 树的话不稳定,O(1-logN)之间,而 B+树的话可以稳定在 O(logN)
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙