1.引言
前面学习索引时,了解到MySQL索引的数据类型有B+Tree索引和哈希索引,本文将详细介绍一下BTree和B+Tree的含义和他们的区别。
2.BTree
2.1 概念
B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。
定义:
B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件:
1. 每个节点最多只有m个子节点。
2. 每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。
3. 如果根不是叶节点,则根至少有两个子节点。
4. 具有k个子节点的非叶节点包含k -1个键。
5.所有叶子都出现在同一水平,没有任何信息(高度一致)。
什么是阶?
节点【13,16,19】拥有的子节点数目最多,有四个子节点(粉色节点),所以可以定义上面的图片为4阶B树。
什么是根节点?
节点【10】即为根节点。包含子节点数关系式2<= M <=m,M为子节点数量;包含的元素数量 1<= K <=m-1,K为元素数量。
什么是内部节点?
节点【13,16,19】、节点【3,6】都为内部节点,特征:内部节点是除叶子节点和根节点之外的所有节点,拥有父节点和子节点。包含子节点数关系式符合(m/2)<= M <=m关系式,包含元素数量M-1;包含的元素数量 (m/2)-1<= K <=m-1,K为元素数量。m/2向上取整。
什么是叶子节点?
节点【1,2】、节点【11,12】等最后一层都为叶子节点,叶子节点对元素的数量有相同的限制,但是没有
子节点,也没有指向子节点的指针。叶子节点的元素符合(m/2)-1<= K <=m-1。
2.2 操作
举例:以5阶数为列
2.2.1 插入操作
规则:
若该节点元素个数小于m-1,直接插入;
若该节点元素个数等于m-1,引起节点分裂;以该节点中间元素为分界,取中间元素(偶数个数,中间两个随机选取)插入到父节点中;
重复上面动作,直到所有节点符合B树的规则;最坏的情况一直分裂到根节点,生成新的根节点,高度增加1;
关键点:
2<=根节点子节点个数<=5
3<=内节点子节点个数<=5
1<=根节点元素个数<=4
2<=非根节点元素个数<=4