B-树与B+树
B-树
B-树(Balance Tree)就是B树(多路搜索树——不是二叉)
B-树的性质
一个m阶的B树具有如下几个特征:
1、根结点至少有两个子女
2、每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3、每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4、所有的叶子结点都位于同一层
5、每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
如上图为3阶B-树,9是[2,6]与[12]的划分,[2,6]中2是[1]和[3,5]的划分,6是[3,5]和[8]的划分……
B+树
B+树是B-树的变体,也是多路搜索树
B+树的性质
一个m阶的B+树具有如下几个特征:
1、有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2、所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3、所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
如上图:
中间结点元素的数目与其子节点数目相同,且每一个对应的都是相应子节点的最大值
所有数据都保存在叶子结点,且按照顺序排列
B*树
是B+树的变体,在B+树的基础上,在中间结点增加指向兄弟的指针
总结
B+树要查询全部数据,只查询叶子结点即可,B-树要中序遍历
B+树查询区间更方便
在B+树中查询不管成不成功,都要到叶子结点
B-树主要用于文件系统及部分数据库(MongoDB)
大部分关系数据库使用的B+树(Mysql)