Mongodb与MySQL索引的区别
2021/7/12 19:36:25
本文主要是介绍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
这篇关于Mongodb与MySQL索引的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程