Jay*_*Jay 2 indexing mongodb mongodb-query aggregation-framework
我对具有40k文档的集合进行汇总查询。
{ aggregate: "REV_TABLE", pipeline: [ { $match: { r: { $lte: 1486066601 }, ISDI_ID: "17" } }, { $group: { _id: "$l", maxVer: { $max: "$r" } } } ] }
Run Code Online (Sandbox Code Playgroud)
我有两个索引:{“ r”:1}和{“ r”:1,“ ISDI”:1}并且背景索引打开。最初,当文档较小时,通常需要不到100毫秒的时间。现在,由于大约35k +,因此耗时超过300ms。
这是预料之中的,我猜35k不是那么大,但是为什么查询要花这么长时间才能返回。
您可以在查询.explain("executionStats")末尾运行查询(例如db.collection.aggregate(yourQuery).explain('executionStats')),然后将获得输出,分析查询的每个部分的性能,包括索引扫描的时间,正在使用的索引等。然后,您可以优化查询的步骤。或者,如果您没有更多的方法可以对其进行优化,那么您将知道,这仅仅是由于要汇总大量文档而导致的。
请记住,聚合通常也用于“管理员后端”和数据分析,并且由于聚合很繁琐,因此在面向消费者的应用程序中并不常用。汇总集合只需要很长时间。
您还可以让MongoDB自动将慢速查询的查询计划转储到集合中(请阅读MongoDB中的数据库概要分析)。
例如,running db.setProfilingLevel(1,20)会将耗时超过20毫秒的所有操作的查询计划转储到名为的集合中system.profile。
| 归档时间: |
|
| 查看次数: |
1985 次 |
| 最近记录: |