提到索引自然是有四种主流索引,分别是:BTREE,HASH,R-TREE,Full-Text,不同的引擎支持不同的索引,这里主要理解BTREE索引。
BTree又叫多路平衡搜索树,一颗m叉的BTree特性如下:
- 树中每个节点最多包含m个孩子。
- 除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子。
- 若根节点不是叶子节点,则至少有两个孩子。
- 所有的叶子节点都在同一层。
- 每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1]<=n <= m-1
先来看m=5的一个5叉BTree:插入如下所有字母C N G A H E K Q M F W L T Z D P R X Y S
,
分析一下,当前已经有4个key和5个指针组成,满足最后一条特性,当我们再插入H
时,已经不满足[ceil(m/2)-1]<=n <= m-1
这个范围,所以这个数据块会分裂开,中间的会分裂成父节点。如下所示:这正好验证若根节点不是叶子节点,则至少有两个孩子
的特性
父节点也满足1个key和2个指针,分别指向左,右两个数据块。继续插入E,K,Q,不发生变化: