Mongodb 如何根据不同情况应用/选择getPlanCache()和hint()

Mongodb 如何根据不同情况应用/选择getPlanCache()和hint(),mongodb,mongodb-query,Mongodb,Mongodb Query,我已经阅读了官方文档,了解了getPlanCache()和hint()的基本概念 getPlanCache() 显示指定查询形状的缓存查询计划 查询优化器仅缓存那些可以有多个可行计划的查询形状的计划 正式文件: 提示() $hint运算符强制查询优化器使用特定索引来完成查询。通过索引名称或文档指定索引 正式文件: MyQuestion 如果我可以确保特定集合可以缓存计划,我就不需要使用hint()来确保优化的性能。对吗 我已经阅读了官方文档,了解了getPlanCache()和hint(

我已经阅读了官方文档,了解了getPlanCache()和hint()的基本概念

  • getPlanCache()
显示指定查询形状的缓存查询计划

查询优化器仅缓存那些可以有多个可行计划的查询形状的计划

正式文件:

  • 提示()
$hint运算符强制查询优化器使用特定索引来完成查询。通过索引名称或文档指定索引

正式文件:

MyQuestion

如果我可以确保特定集合可以缓存计划,我就不需要使用hint()来确保优化的性能。对吗

我已经阅读了官方文档,了解了getPlanCache()和hint()的基本概念

需要明确的是:这些是用于调查查询性能的疑难解答帮助。MongoDB根据执行给定查询形状所涉及的“工作量”度量来选择可用的最有效的计划。如果只有一个可行的计划,则无需缓存计划选择。如果有多个查询计划可用于同一查询形状,查询计划器将定期评估性能,并在适当时更新缓存的计划选择

允许您检查和清除计划缓存中的信息。通常,您只希望在调查开发/登台环境中的问题时清除计划缓存,因为这可能会对繁忙的部署产生明显的影响

如果我可以确保特定集合可以缓存计划,我就不需要使用hint()来确保优化的性能。对吗

通常,您应该避免使用
hint
(在测试查询计划之外),因为这会绕过查询计划器并强制使用提示索引,即使可能有更有效的索引可用

如果某个特定查询没有按预期执行,则是深入了解查询计划过程的最佳起点。如果您不确定如何优化特定查询,我建议您发布一个问题,包括
explain(true)
(verbose explain)的输出和您的MongoDB服务器版本

有关有用的演示,请参见:(2017年6月)