Mongodb与MySQL索引的区别

时间:2021-07-12
本文章向大家介绍Mongodb与MySQL索引的区别,主要包括Mongodb与MySQL索引的区别使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Mongodb与MySQL索引的区别

   Mongodb索引使用B树,而MySQL使用B+树。那么这两者的区别是什么?

   注意:这里的Mysql指的是Innodb的存储引擎下的索引结构,其他存储引擎暂不考虑。

   1、B+树的特点

   1)数据只出现在叶子节点

   2)所有叶子节点增加了一个链指针

   2、B树的特点

   1)树内的每个节点都存储数据

   2)叶子节点之间无指针相邻

   3、Mongodb与MySQL索引的区别

   可以从两个角度来看

   1)数据结构

   B树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。这就决定了B+树更适合外部存储,也就是磁盘存储。

B+树所有的Data域都在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。

   2)设计角度

   mongodb并不是传统的关系性数据库,而是以Bson(Binary-JSON)格式作为存储的nosql,目的就是高性能,高可用,易扩展。首先它摆脱了关系模型,对于区间访问的需求就没那么强烈了。

其次Mysql由于使用B+树,数据都在叶节点上,每次查询都需要访问到叶节点,而MongoDB使用B树,所有节点都有Data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql。

   4、总结

   针对上面的B+树和B树的特点,我们做一个总结

   1)B树的树内存储数据,因此查询单条数据的时候,B树的查询效率不固定,最好的情况是O(1)。我们可以认为在做单一数据查询的时候,使用B树平均性能更好。但是,由于B树中各节点之间没有指针相邻,因此B树不适合做一些数据遍历操作。

 

   2)B+树的数据只出现在叶子节点上,因此在查询单条数据的时候,查询速度非常稳定。B+树查询时间复杂度固定是logn,B树查询复杂度最好是 O(1)。因此,在做单一数据的查询上,其平均性能并不如B树。但是,B+树的叶子节点上有指针进行相连,因此在做数据遍历的时候,只需要对叶子节点进行遍历即可,这个特性使得B+树非常适合做范围查询。

 

因此,我们可以做一个推论:没准是Mysql中数据遍历操作比较多,所以用B+树作为索引结构。而Mongodb是做单一查询比较多,数据遍历操作比较少,所以用B树作为索引结构。

     几点疑问

     1、那么为什么Mysql做数据遍历操作多?而Mongodb做数据遍历操作少呢?

     因为Mysql是关系型数据库,而Mongodb是非关系型数据。

 

     2、那为什么关系型数据库,做数据遍历操作多?而非关系型数据库做数据遍历操作少呢?

 

     结论:

     因此,由于关系型数据库和非关系型数据的设计方式上的不同。导致在关系型数据中,遍历操作比较常见,因此采用B+树作为索引,比较合适。而在非关系型数据库中,单一查询比较常见,因此采用B树作为索引,比较合适。

 

参考链接:https://www.cnblogs.com/rjzheng/p/12316685.html

原文地址:https://www.cnblogs.com/hld123/p/15003525.html