我是Mongo的新手并且已经搜索但没有看到具体的答案。
我了解Mongo explain method将与可能的访问计划并行执行查询,并根据执行时间选择获胜计划。
最佳实践指南声明“无需先运行查询即可计算并返回查询计划”。 我在文档中找不到如何执行此操作。
那么,即使获胜计划在返回甚至是小结果集之前需要很长时间才能执行,例如对大型集合进行排序?
我见过较早的评论说,在返回前101个文档后执行会停止,但在官方文档中再次找不到。
所以我的问题是:如何在不执行查询的情况下获取访问计划?
感谢您的帮助。我正在使用Mongo 3.4。
答案 0 :(得分:0)
您可以设置explain()
功能的详细程度。默认情况下,它会使用queryPlanner
,这是(如果我正确)您要查找的内容。
答案 1 :(得分:0)
MongoDB通过运行查询的有限子集来构建Query Plans,然后缓存获胜计划,以便可以重复使用(直到某些内容导致缓存刷新)。
因此,“有限子集”意味着它将获得与100个文档匹配的文档作为“样本”,并且不再进一步,但文档的含义是什么
无需先验证即可计算并返回查询计划 运行查询
是您可以在运行完整查询之前进行解释。这是一种很好的做法,因为它会提前为您填充计划缓存。
简单地说,如果MongoDB注意到另一个查询花费的时间比完成的查询要长,它将停止执行并放弃计划以支持更高效的计划。例如,您可以通过运行allPlansExecution解释来查看此操作,其中通过colscan选择索引。