Q:偶尔我发现SQL Server内置的查询优化器工作效率不佳,查询计划不够优化。我如何调整查询计划?
A:
您可以使用SQL Server优化提示来覆盖查询优化器。优化提示可以被分为五大类:
表提示:用于强制索引选择
查询提示:用于影响GROUP BY和UNION功能
锁提示:用于帮助避免不想要的锁定
视图提示:用于指定索引视图上的索引
其他提示:各种提示
一般来说要尽量减少使用提示。这是因为查询优化器在绝大多数情况下比我们明智得多,它生成的查询计划通常是最优的。如果您指定的提示是错误的或不是最理想的,它会依照错误的方法来生成查询计划,持续地影响性能。
如果您认为可能需要用到提示来优化您的查询,请先确认您已经做过了以下可能是问题真实原因的步骤:
1. 更新相关表的统计信息
2. 如果问题查询是在存储过程中,重新编译该存储过程,然后重新运行一下,以观察情况是否有改善
3. 检查搜索参数以确认它们是可搜索优化的
4. 检查当前的索引,如果有必要的话做改动
如果您已经进行了上述工作,查询依然不能按预期执行,那么您需要考虑使用合适的优化提示。
另外一个使用提示的问题就是提示可能只在某个特定情景下起作用。如果情景改变了的话那么提示可能不再合适。
更多与提示相关的信息,请参考http://msdn.microsoft.com/en-us/library/ms187713.aspx。