1、B树
B树是一种自平衡的搜索树
最核心的特点如下:
(1)多路,非二叉树
(2)每个节点既保存索引,又保存数据
(3)搜索时相当于二分查找
在这里我们假定都已经了解了B树相关的结构。
2、B+树
B+树是B-树的变种
最核心的特点如下:
(1)多路非二叉
(2)只有叶子节点保存数据
(3)父节点的数据会出现在子节点中(因为最终查找都会到叶子节点)
(4)搜索时相当于二分查找
(5)增加了相邻接点的指向指针。
从上面我们可以看出最核心的区别主要有俩,一个是数据的保存位置,一个是相邻节点的指向。就是这俩造成了MongoDB和Mysql的差别。为什么呢?
3、B树和B+树的区别
(1)B+树查询时间复杂度固定是logn(因为只有叶子节点保存数据),B树查询复杂度最好是 O(1)。
(2)B+树相邻接点的指针可以大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。
(3)B+树更适合外部存储,也就是磁盘存储。由于内节点无 data 域,每个节点能索引的范围更大更精确
(4)注意这个区别相当重要,是基于(1)(2)(3)的,B树每个节点即保存数据又保存索引,所以磁盘IO的次数很少,B+树只有叶子节点保存,磁盘IO多,但是区间访问比较好。
有了他们的区别之后,现在我们再来解释这个原因就好多了。