Mongo - 如何解释查询而不执行它

时间:2017-07-30 20:56:47

标签: mongodb explain

我是Mongo的新手并且已经搜索但没有看到具体的答案。

我了解Mongo explain method将与可能的访问计划并行执行查询,并根据执行时间选择获胜计划。

最佳实践指南声明“无需先运行查询即可计算并返回查询计划”。 我在文档中找不到如何执行此操作。

那么,即使获胜计划在返回甚至是小结果集之前需要很长时间才能执行,例如对大型集合进行排序?

我见过较早的评论说,在返回前101个文档后执行会停止,但在官方文档中再次找不到。

所以我的问题是:如何在不执行查询的情况下获取访问计划?

感谢您的帮助。我正在使用Mongo 3.4。

2 个答案:

答案 0 :(得分:0)

您可以设置explain()功能的详细程度。默认情况下,它会使用queryPlanner,这是(如果我正确)您要查找的内容。

检查official MongoDB documentation about explain()

中的其他模式

答案 1 :(得分:0)

MongoDB通过运行查询的有限子集来构建Query Plans,然后缓存获胜计划,以便可以重复使用(直到某些内容导致缓存刷新)。

因此,“有限子集”意味着它将获得与100个文档匹配的文档作为“样本”,并且不再进一步,但文档的含义是什么

  

无需先验证即可计算并返回查询计划   运行查询

是您可以在运行完整查询之前进行解释。这是一种很好的做法,因为它会提前为您填充计划缓存。

简单地说,如果MongoDB注意到另一个查询花费的时间比完成的查询要长,它将停止执行并放弃计划以支持更高效的计划。例如,您可以通过运行allPlansExecution解释来查看此操作,其中通过colscan选择索引。