【问题标题】:Mongo aggregate query taking a long timeMongo 聚合查询耗时较长
【发布时间】:2017-06-21 07:28:01
【问题描述】:

我对包含 40k 个文档的集合进行聚合查询。

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

我有两个索引: {"r":1} 和 {"r":1 , "ISDI":1} 并且后台索引已打开。 最初,当文档很小时,它通常需要

这是预期的吗,我猜 35k 并没有那么大,但为什么查询需要这么长时间才能回来。

【问题讨论】:

  • 复合索引是在{"r":1 , "ISDI":1} 还是{"r":1 , "ISDI_ID":1}

标签: mongodb indexing mongodb-query aggregation-framework


【解决方案1】:

我建议查看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 的集合中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多