MySQL索引背后的数据结构

树的节点的度是指节点的子树个数;树的度指其中节点的度最大值。

B树中的M阶表示一个节点最多可以拥有的子节点数。

B-Tree

树的度为m,高度为h。

$$
非叶节点最少有\lceil m/2 \rceil个子节点
$$

每个非叶子节点有n-1个关键字(key),有n的指针,其中m<=n<=2m

我们假设现在有一棵深度为1的5阶B树:

在这里插入图片描述

再添加一个节点可能存在两种情况:

如果不对B树非叶子节点加以限制,那么这个树的节点和深度就会迅速膨胀。

由于B树是针对外存储器设计的多路查找结构,而一次外存储器IO操作的时间代价要比主存储器读写高出上万倍。因此B树的层数每减少一层、结点数量每减少一个,就是在减少一次外存储器的IO操作。所以说此种限制是为了最大限度的减少查找路径的长度,提高查找效率。

B+树

非叶子节点不保存数据,只保存关键字用做索引,所有数据都保存在叶子节点中。

所有叶子节点通过指针链相连,且叶子节点本身按关键字的大小从小到大顺序排列。


MySQL索引背后的数据结构
http://liushuliang.github.io/2024/08/15/MySQL索引背后的数据结构/
作者
刘公子
发布于
2024年8月15日
许可协议