开发者社区> 问答> 正文

关于Mongodb查询性能方面的疑问

先来一个情景假设,假如一个文档中有很多结构,比如一个MM集合类,里面有A, B, C, D, E, F等字符串结构,然后我们主动存入了一定量的数据,此时有一个业务需求为获取某一个文档的信息,我们事先知道D的值为随机的字符串‘d34fd45f3’,当然我们也知道此要查找的文档的'_id'为‘523032cf21d7f7199037f467’。
理论上,如果使用‘_id’来查找的话会非常的快,因为id具有一定的顺序性,能够起到索引的作用,因此会很快定位到;而如果使用查找D的值的话,理论上是会进行扫表的行为,把整个集合都扫描一遍进行比较(除了这种方法我想不出还有其他方法),因此这种方法效率应该很低才是。
实际中,我通过添加数据的数据从10条,100条,1000条,10k条发现两种方法的操作时间上差不多,分别如下所示:
10条: by_id:0.00072243s by_str:0.00080101s
100条: by_id:0.00072503s by_str:0.00080418s
1000条:by_id:0.00073218s by_str:0.00078892s
10K条: by_id:0.00072598s by_str:0.00082588s
100K条:by_id:0.00125479s by_str:0.00142097s

只测试到10万条数据,再大怕本本撑不住,所以没测,不过通过以上数据观察到两者方式竟然花费的时间差不多,跟理论上预测不符,这就是我非常奇怪的原因。还请各位对mongodb有些经验的大牛开导一下,多谢了。

展开
收起
落地花开啦 2016-02-20 18:02:39 1911 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    数据较少时,是全缓存到内存中的,这时的性能差异当然就很小了
    单表5000万以下,并不是NOSQL的最佳应用场景。

    2019-07-17 18:45:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 立即下载
MongoDB多数据中心的方案选型之路 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载