b树和b+树
二叉树优化的是比较次数,而B/B+数优化的是磁盘读写次数。
b树是一种多路平衡查找树,它的每一个节点最多包含k个孩子,k被称为B树的阶。k的大小取决于磁盘页的大小。
一个m阶的B树具有如下几个特征:
1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
b树主要用于文件系统以及部分数据库索引。
b+树是b树的变体,查询性能更好。
b+树的特征:
1. 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2. 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3. 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
1. b+树的中间节点不保存数据,所以磁盘页可以容纳更多的节点元素,更加矮胖。
2. b+树查询必须查找到叶子节点,b树只要匹配到即可。所以,b+树更加稳定(但是不慢)。
3. 对于范围查询来说,b+树只需要遍历叶子节点链表即可,b树却需要重复中序遍历。
b树:
b+树: