1 定义
一个m阶的B+树(Balance+ Tree)的特征:
- 有k个子节点的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
- 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字按照自小而大的顺序链接起来。
- 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
2 卫星数据
B+树的中间节点没有卫星数据,所以同样大小的磁盘页可以容纳更多的节点元素,这就意味着,数据量相同的情况下,B+树的结构比B树更加“矮胖”,因此查询时IO次数也更少。
B+树的卫星数据存于叶子节点,所以查询性能稳定;而B树卫星数据存于所有节点,所以查询性能不稳定。
- 聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。
- 非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。
3 查找
查找元素3。
4 范围查找
链表的遍历,3-11。
5 B树与B+树的比较
卫星数据 | IO次数 | 性能的稳定性 | 范围查找 | 应用 | |
---|---|---|---|---|---|
B树 | 所有节点 | 较多 | 不稳定 | 树的中序遍历 | Memory引擎 |
B+树 | 叶子节点 | 较少 | 稳定 | 链表的遍历 | InnoDB引擎 |