B+Tree 与 B-Tree 结构详解
概述
B+树与B树,是数据库中常用的两种关键结构。
算法可视化:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
一、B+树
演示: https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
原理:https://www.programiz.com/dsa/b-plus-tree
B+树 是目前最常用的一种索引数据结构。B+树(B+ Tree)是B树的一种变体,广泛应用于数据库系统和文件系统的索引结构。
与B树相比,B+树在结构上有一些改进,特别是在提高查询效率、范围查找性能和磁盘I/O效率等方面更具优势。
定义
B+树 是 B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层内部节点的关键字作为索引使用。
B+树中的节点分为两类:
内部节点:不存储实际数据,仅存储键值用于指引查找方向。每个内部节点有多个子节点指针,节点中键值将子节点分隔成不同区间。
叶子节点:存储实际的键值和数据指针。所有数据都存储在叶子节点中,并且叶子节点之间通过链表相连。
一棵 m 阶(Order/Degree) 的 B+树 定义如下( 注意: B+树的阶数 m表示一个节点最多能有m个子女(子节点),也就是每个节点上最多的键值个数.)
- 假设B+树的阶数为 m,则每个结点至多有m个子女(子节点/关键字),有k个子女的结点必有k个关键字:
- 每个内部节点 non-leaf 最多有 m 个子节点,至少有 ⌈m/2⌉ 个子节点。
- 每个叶子节点 leaf 存储 ⌈m/2⌉ 到 m 个 键值/关键字(子女)。
- 叶子节点包含所有键值和对应的数据指针。这些键值按照递增顺序排列,并通过链表连接,支持快速范围查询。
- 树的平衡性:B+树始终保持平衡,所有叶子节点位于同一层,查找的时间复杂度为 O(logn)。
- 叶子节点的链表结构:B+树中的叶子节点通过链表相连,方便进行顺序遍历或范围查找。
B+树 的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止
浙公网安备 33010602011771号