banner

B+ 树

B+ 树

B+ 树是应数据库所需出现的一种 B 树的变形树,严格来讲,它已经不是标准定义的树了。
一棵 m 阶的 B+ 树与 B 树的区别在于:
(1) 节点中关键字的数量和子树的数量相等,即有 \(n\) 棵子树的节点同样有 \(n\) 个关键字 (\(⌈\frac{m}{2}⌉≤n≤m\)) ;
(2) 所有叶子节点包含全部关键字和指向相应记录的指针,并且叶子节点本身按照关键字大小自小到大顺序链接;
(3) 所有非终端节点可以视为索引部分,节点中仅包含其子树中的最大关键字及相应的子树指针。

根据 B+ 树的定义可以发现,它其实类似于分块查找,也称作索引顺序查找

B+ 树的查找

B+ 树上通常有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点。因此,B+ 树可以进行两种查找运算:一种是从最小关键字开始的顺序查找,另一种是从根节点开始的多路查找。

从根开始的多路查找与 B 树不同的地方是:如果非终端节点上的关键字等于给定值,并不终止,而是继续向下知道叶子节点,因为非终端节点只是索引,所有关键字都在叶子上。
因此,在 B+ 树上查找,无论成功与否,每次查找都走了一条从根到叶子的路径。

B+ 树的插入

B+ 树的插入仅在叶子节点进行,关键字数量大于 \(m\) ,分裂操作与 B+ 树相同

B+ 树的删除

B+ 树的删除也仅在叶子节点进行,关键字数量小于 \(⌈\frac{m}{2}⌉\) ,合并操作与 B 树相同

POLARDB · B+树并发控制机制的前世今生

归档 分类 标签 关于