我已经阅读了官方文档,以获取有关getPlanCache()和hint()的基本思想。
显示指定查询形状的缓存查询计划。
查询优化器仅缓存那些具有多个可行计划的查询形状的计划。
官方文档:https://docs.mongodb.com/manual/reference/method/PlanCache.getPlansByQuery/
$ hint运算符强制查询优化器使用特定索引来满足查询。通过索引名称或文档指定索引。
官方文档:https://docs.mongodb.com/manual/reference/operator/meta/hint/
我的问题
如果我可以确保特定的集合可以缓存计划,则不需要使用hint()来确保优化的性能。正确吗?
答案 0 :(得分:1)
我已经阅读了官方文档,以获取有关getPlanCache()和hint()的基本思想。
要清楚:这些是调查查询性能的故障排除帮助。 MongoDB query planner根据执行给定查询形状所涉及的“工作”量度来选择最有效的计划。如果只有一个可行的计划,则无需缓存计划选择。如果有多个查询计划可用于同一查询形状,则查询计划者将定期评估性能,并在适当时更新缓存的计划选择。
query plan cache methods允许您检查和清除计划缓存中的信息。通常,您只希望在调查开发/分阶段环境中的问题时清除计划缓存,因为这可能会对繁忙的部署产生明显影响。
如果我可以确保特定的集合可以缓存计划,则不需要使用hint()来确保优化的性能。正确吗?
通常,您应该避免使用hint
(在测试查询计划之外),因为这会绕过查询计划程序,即使可能有更有效的索引可用,也会强制使用提示的索引。
如果特定查询未按预期执行,则explain()
output是了解查询计划过程的最佳起点。如果您不确定如何优化特定查询,建议您在DBA StackExchange上发布问题,包括explain(true)
的输出(详细解释)和您的MongoDB服务器版本。
有关有用的演示,请参见:Reading the .explain() Output - Charlie Swanson(2017年6月)。