首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有索引的MongoDB搜索真的很慢吗?

没有索引的MongoDB搜索真的很慢吗?
EN

Stack Overflow用户
提问于 2013-06-27 18:51:12
回答 1查看 4.6K关注 0票数 7

我正在尝试MongoDB的性能,以比较我当前基于MySQL的解决方案。

在具有三个属性A、B和C的集合/表X中,我在MongoDB和MySQL中都对属性A进行了索引。

现在,我在MongoDB和MySQL中抛出1M数据,并在这个直接的场景中尝试搜索性能。

与insert to MySQL相比,MongoDB上的插入速度仅快10%。但这没关系,我知道采用MongoDB不会给我的CRUDs带来神奇的推广,但我真的对在MongoDB中没有索引的搜索感到惊讶。

结果表明,非索引字段上的MongoDB select比索引字段上的select慢10倍。

另一方面,非索引字段的MySQL select (MyISAM)仅比索引字段的select慢约70%。

最后但并非最不重要,在select with index场景中,MongoDB比我的MySQL解决方案快大约30%。

我想知道,以上数字是正常的吗?尤其是没有索引的MongoDB select的性能?

我的代码如下:

代码语言:javascript
复制
BasicDBObject query = new BasicDBObject("A", value_of_field_A);
DBCursor cursor = currentCollection.find(query);
while(cursor.hasNext()) {
    DBObject obj = cursor.next();
    // do nothing after that, only for testing purpose
}

顺便说一句,从业务逻辑的角度来看,我的收藏可能真的很大(TB或更多),您建议每个物理收藏的大小是多少?1000万个文档还是10亿个文档?

非常感谢!

我在MongoDB和MySQL上尝试了这个有1,000条记录的insert,MongoDB的行为比MySQL快了大约20% --并没有我想象的那么快。

我很好奇,如果我设置了MongoDB自动分片,插入速度会提升吗?如果是这样,我是否需要将分片放在不同的物理机器上,或者我可以将它们放在具有多核的同一台机器上?

首先,我将MongoDB写入问题从已确认修改为未确认,然后MongoDB插入速度提高了3倍。

后来,我做了一个并行的插入程序(8个线程与8核计算机),对于MongoDB确认模式,插入也改进了3倍,对于它的未确认模式,速度实际上慢了50%。

对于MySQL,并行插入模式将速度提高了5倍!这比MongoDB中最好的插入用例更快!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 19:43:03

没有索引的MongoDB查询将进行表扫描,我们应该知道,与mysql相比,mongodb的数据量要大得多。我猜这可能是做全扫描时速度慢的原因之一。

对于带有索引的查询,mongoDB可能会更快,因为有了缓存,没有复杂的查询优化器计划(如mysql)等。

集合的大小不是问题。事实上,1000万可以很容易地在一个集合中处理。如果你有存档数据的需求,那么你可以分成更小的集合,这将使过程变得容易。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17341165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档