B树与B+树:猫与猫头鹰。
m阶的B树和B+树的差异(以5阶为例):
- B+树由分块查找进化而来;B树由二叉排序树进化而来。
- B+树中,每个非根结点关键字的取值范围是3≤n≤5,有n棵子树;B树中,每个非根节点关键字的取值范围是2≤n≤4,有n+1棵子树。
- 在B+树中,仅叶结点包含信息,非叶结点只起索引作用;在B树中,全部结点的关键字都包含信息。
- 在B+树中,叶结点包含了全部的关键字,非叶子结点中出现的关键字一定会出现在叶结点中;在B树中,任何结点中的关键字都不会重复。
- B+树支持顺序查找和多路查找;B树只支持多路查找。
- 在B+树中,查找成功或失败都会到达最下一层;而在B树中,查找成功时,可能停在任何一层结点(关键字相同即查找成功,结束)。
- B+树和B树在文件系统中应用较为广泛,在关系型数据库中也用的比较多,比如说MySQL数据库的索引用的就是B+树。
B+树较B树的存储优势:
B树:
- InnoDB 存储引擎磁盘页默认大小为16KB, 无法加载太多带节点的索引到内存,所以每次加载不了太多,速度达不到最优。
- B树结构图如下所示,可以看到每个节点不仅包含数据的key值,还有data值。而每一页的存储空间是有限的,如果data数据较大将会导致每个节点(即一个页)能存储的key的数量较小,当存储的数据量很大时同样会导致B树的深度较大,增大查询时磁盘的I/O次数进而影响查询效率。
B+树:
- 在B+树中,仅叶结点包含信息,非叶结点只起索引作用;这样InnoDB存储引擎的磁盘页就可以加载较多的索引信息,从而减小查询时磁盘的I/O次数,进而优化查询效率。