由图可以看出,B+树有以下几个特点
- 非叶子节点的子树指针和关键字个数相同,如上图中每三个关键字都有三个子树指针
- 非叶子节点的子树指针P[i],指向关键字值[P[i],P[i+1]]的子树,但是这个左区间的值不是固定的为P[i]的最小值,也可能是P[i]的最大值,比如图中最左侧的部分,10是P[i]的最小值,但是P[i]也可以是18,但是一定要小于P[i+1]的值
- 非叶子节点只用来索引,数据都保存在叶子节点中
- 所有叶子节点都有一个链指指针指向下一个叶子节点,这样就有的定位范围的能力,而不用返回上一层节点去进行查找
总结
B+Tree 更适合来用作索引
- 磁盘读写代价更低,内部节点都是指针,如果把所有同一内部节点的关键字放在同一盘块中所能容纳的关键字数量会越多,相对来说io就降低了
- 查询效率更加稳定,因为任何关键字的查询从根节点走向叶子节点的路,所有关键字查询的长度相同,结果就是每一条数据查询效率也几乎是相同的稳定的O(logN)
- 更利于对数据库的扫描,B树在提高了磁盘io的同时,并没有解决元素遍历效率低下的问题,B+树只需要遍历叶子节点,就可以解决对全部关键字的扫描。所以对数据库中的范围查询有着更高的性能