Mongo聚合查询需要很长时间

时间:2017-02-03 20:26:06

标签: mongodb indexing mongodb-query aggregation-framework

我对具有40k文档的集合进行了聚合查询。

{ aggregate: "REV_TABLE", pipeline: [ { $match: { r: { $lte: 1486066601 }, ISDI_ID: "17" } }, { $group: { _id: "$l", maxVer: { $max: "$r" } } } ] } 

我有两个索引:{" r":1}和{" r":1," ISDI":1}并且后台索引已打开。 最初,当文件较小时,过去采用< 100毫秒。 现在它已经超过35k +,它的耗时超过300ms。

这是预期的吗?我猜测35k不是那么大但是为什么查询花了这么长时间才回来。

1 个答案:

答案 0 :(得分:3)

我建议您查看Analyzing Query Performance in MongoDB的文档。

您可以在其末尾使用.explain("executionStats")运行查询(例如db.collection.aggregate(yourQuery).explain('executionStats')),然后您将获得分析查询每个部分性能的输出,包括索引扫描的时间,正在使用哪些索引等。然后,您可以采取措施来优化查询。或者,如果没有其他任何可以做的优化,那么你就会知道这只是你想要聚合的大量文档的结果。

请记住,聚合通常也适用于“管理员后端”和数据分析,并且在面向消费者的应用程序中不常使用,因为聚合很重。汇总集合只需要很长时间。

您也可以让MongoDB自动将慢查询的查询计划转储到集合中(阅读Database Profiling in MongoDB)。

例如,运行db.setProfilingLevel(1,20)会将超过20毫秒的任何操作的查询计划转储到名为system.profile的集合中。