数据结构与算法 —— B - Tree 和 B + Tree
一、M 阶 B - Tree(B Tree) 特点
- 所有节点中的 key 数量 <= m - 1。
- 根节点的 key 数量 >= 1。
- 非根节点至少含有 m / 2 个 key 。
- 所有节点中的 key 都按照从小到大排列。每个 key 的左子树中所有 key 都小于它,其右子树中所有的 key 都大于它。
- 所有的叶子节点都位于同一层。
- 所有节点都存有索引和数据,即:key - value。
二、M 阶 B + Tree 特点
- 所有节点中的 key 数量 <= m - 1。
- 根节点的 key 数量 >= 1。
- 非根节点至少含有 m / 2 个 key 。
- 所有节点中的 key 都按照从小到大排列。每个 key 的左子树中所有 key 都小于它,其右子树中所有的 key 都大于它。
- 所有的叶子节点都位于同一层。
- 节点分为内部节点和叶子节点。内部节点只保存 key,即:索引。
- 叶子节点保存所有的 key 和 value 。
- 每个叶子节点都含有与其紧邻的叶子节点的地址,故形成了链表。
三、B + Tree 优势
- 每一个节点存储的 key 更多,使得查询的 IO 次数更少。因为每个节点都保存在一个页的存储空间内,其存储空间是有限的,如果 data 很大,直接导致每个节点中包含的 key 变少,tree 的深度加大,从而导致了查询时磁盘 IO 的次数增加,性能下降。
- 因为所有的 key - value 都保存在子节点中,每次查询都要到大子节点,使得查询的性能稳定。
- 所有叶子节点形成一个双向链表,方便查找。
图片原网址:https://www.cnblogs.com/vianzhang/p/7922426.html
(SAW:Game Over!)