为什么Mongodb索引使用B树,而Mysql用B+树?
B树
特点:
- 树内的每个节点都存储数据
- 叶子节点之间无指针相邻
B+树
特点:
- 数据只出现在叶子节点
- 所有叶子节点增减了一个链指针
针对上面的B+树和B树的特点,这里做一个总结:
1. B树的树内存储数据,因此查询单条数据的时候,B树的查询效率不固定,最好的情况是O(1)。可以认为在做单一数据查询的时候,使用B树平均性能更好。但是由于B树中各节点之间没有指针相邻,因此B树不适合一些数据遍历操作。
2. B+树的数据只出现在叶子结点上,因此在查询单条数据的时候,查询速度非常稳定,因此,在做单一数据的查询上,其平均性能并不如B树,但是B+树的叶子节点上有指针进行相连,因此在做数据遍历的时候,只需要对叶子节点进行遍历即可,这个特性是的B+树非常适合做范围查询。
因此,这里可以做一个推论:Mysql做数据遍历的操作比较多,所以用B+树作为索引结构,而Mongodb是做单一查询比较多,数据遍历比较少,所以用B树作为索引结构
3.Mysql是一种关系型数据库,而Mongodb是一种非关系型数据库,通常在Mysql中少不了用多表联合查询,因此就少不了对数据的遍历了,因此对于B+树结构的mysql来说,可以通过子节点之间遍历快速地了查找数据,而Mongodb的设计模式是力争把多个表的数据都设计到用一个表来表示,因此它用单一数据查询上,其B树结构更显得快一些。
4.总之,不管是B树还是B+树,它们的设计都是由当初设计数据库模式来决定的。没有谁优谁劣。