Mongo查询性能

时间:2016-01-29 12:42:38

标签: performance mongodb indexing collections mongo-collection

使用MongoChef我发现随着时间和集合中文档的数量,查询变得越来越慢。 EX:我去年11月开始使用应用程序,从那时起,我将数据保存到同一个集合中的mongo DB中,但没有到期日。

现在我执行此查询:

{ "mongoTime": { $gte: "2015-09-01T15:46:51+0200" }, $and: [ { "mongoTime": { $lt: "2015-11-01T15:46:51+0200" } } ] }

在0.178秒内检索 239 691份文件2个月时间段。

可是:

{ "mongoTime": { $gte: "2016-01-27T00:00:00+0000" }, $and: [ { "mongoTime": { $lt: "2016-01-29T11:38:42+0000" } } ] }

在6.391秒内检索 199 909份文件3天时间段。

差异:第一个查询获取第一个插入Mongo的文档,第二个查询获取最近3天内的所有文档,直到现在。

当然,Collection已经拥有数百万份文档,我想阅读一些关于如何处理这个问题的建议。我想过使用索引:somethig like:

db.clicks.createIndex( { "mongoTime": 1 } ) 

OR

db.clicks.createIndex( { "mongoTime": -1 } )

但更新此Collection的索引需要一段时间,在发出错误之前最好先询问,索引也会影响写入性能。

提前感谢。

阅读正确答案并附上索引后

{ "mongoTime": { $gte: "2016-01-27T00:00:00+0000" }, $and: [ { "mongoTime": { $lt: "2016-01-29T11:38:42+0000" } } ] }

以0.194秒检索 199 909份文件3天时间段。

大改进。感谢...

1 个答案:

答案 0 :(得分:2)

db.clicks.createIndex( { "mongoTime": 1 } ) 

是的,此索引将显着提高您提供的查询的性能。 MongoDB将能够更有效地检查您的查询的过滤条件 - 而不是遍历集合中的每个文档,它将通过B-tree索引,从而大大减少了它必须访问的节点数。 / p>

顺便说一句,您没有正确使用$and。这是正确的方法:

{ $and: [
    { "mongoTime": { $gte: "2016-01-27T00:00:00+0000" } },
    { "mongoTime": { $lt: "2016-01-29T11:38:42+0000" } }
] }