B树与B+树:猫与猫头鹰。

m阶的B树和B+树的差异(以5阶为例):

  1. B+树由分块查找进化而来;B树由二叉排序树进化而来。
  2. B+树中,每个非根结点关键字的取值范围是3≤n≤5,有n棵子树;B树中,每个非根节点关键字的取值范围是2≤n≤4,有n+1棵子树。
  3. 在B+树中,仅叶结点包含信息非叶结点只起索引作用;在B树中,全部结点的关键字都包含信息
  4. 在B+树中,叶结点包含了全部的关键字非叶子结点中出现的关键字一定会出现在叶结点中;在B树中,任何结点中关键字都不会重复
  5. B+树支持顺序查找和多路查找;B树只支持多路查找
  6. 在B+树中,查找成功或失败都会到达最下一层;而在B树中,查找成功时,可能停在任何一层结点(关键字相同即查找成功,结束)。

alt

alt

  • B+树和B树在文件系统中应用较为广泛,在关系型数据库中也用的比较多,比如说MySQL数据库的索引用的就是B+树。

B+树较B树的存储优势:

B树:

  • InnoDB 存储引擎磁盘页默认大小为16KB, 无法加载太多带节点的索引到内存,所以每次加载不了太多,速度达不到最优。
  • B树结构图如下所示,可以看到每个节点不仅包含数据的key值,还有data值。而每一页的存储空间是有限的,如果data数据较大将会导致每个节点(即一个页)能存储的key的数量较小,当存储的数据量很大时同样会导致B树的深度较大增大查询时磁盘的I/O次数进而影响查询效率alt

B+树:

  • 在B+树中,仅叶结点包含信息非叶结点只起索引作用;这样InnoDB存储引擎的磁盘页就可以加载较多的索引信息,从而减小查询时磁盘的I/O次数,进而优化查询效率alt