其实现有两个背景:
1. B+树本质是棵平衡m叉树,而平衡树就是解决一般多叉树失衡导致性能退化为线性的问题而生的,除了B+树,还有很多平衡树,AVL,红黑树,B树等等。
2. ,现实应用中,大多数的文件系统索引和数据库索引都是用B+树实现的,那么为什么选择了B+树作为其实现呢?
参考资料:sql优化(面试必问一)
这个是有实际证据的,如MySQL中,采用B+树成功限制了,树高,参见:
为什么 MySQL 的索引要使用 B+ 树,而不是其它树?比如 B 树?
经作者实测,高度为3的B+树存了600w+的数据,理论上可以存2000w+。原因上面包括这个链接也提到:
-
InnoDB存储引擎的最小存储单元是页,页可以用于存放数据也可以用于存放键值+指针,在B+树中叶子节点存放数据,非叶子节点存放键值+指针;
-
索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而在去数据页中查找到需要的数据。
每页大小固定——16K,对于非叶子节点空间可以用于存“key+孩子指针”,由于不含数据(B+树非叶子节点没有数据),所以一页可以存很多项“key+孩子指针”,这意味着最后一层的叶子节点数目 = m^(height - 1)。
叶子节点的空间就用来存数据。