将查询提示附加到计划指南

有效的查询提示的任意组合都可以在计划指南中使用。 当执行计划指导与查询匹配时,在编译和优化之前,将在计划指导中 hints 子句中指定的 OPTION 子句添加到查询中。 如果与计划指南匹配的查询已有 OPTION 子句,则计划指南中指定的查询提示将替换查询中的查询提示。 但是,对于与已有 OPTION 子句的查询匹配的计划指南,在指定要在 sp_create_plan_guide 语句中匹配的查询的文本时,必须包含查询的 OPTION 子句。 如果希望将计划指南中指定的提示添加到查询中已存在的提示,而不是替换它们,则必须在计划指南的 OPTION 子句中指定原始提示和附加提示。

谨慎

误用查询提示的计划指南可能会导致编译、执行或性能问题。 计划指南只能由经验丰富的开发人员和数据库管理员使用。

计划指南中使用的常见查询提示

可从计划指南中获益的查询通常是基于参数的,并且性能不佳,因为它们使用缓存的查询计划,其参数值不表示最坏的情况或最具代表性的方案。 查询提示 OPTIMIZE FOR 和 RECOMPILE 可用于解决此问题。 OPTIMIZE FOR 指示 SQL Server 在优化查询时对参数使用特定值。 RECOMPILE 指示服务器在执行后放弃查询计划,强制查询优化器在下一次执行同一查询时重新编译新的查询计划。 有关示例,请参阅 计划指南

此外,还可以将表提示 INDEX、FORCESCAN 和 FORCESEEK 指定为查询提示。 指定为查询提示时,这些提示的行为类似于内联表或视图提示。 INDEX 提示强制查询优化器仅使用指定的索引来访问引用表或视图中的数据。 FORCESEEK 提示强制优化器仅使用索引查找来访问引用的表或视图中的数据。 这些提示提供了其他计划指南功能,并允许你对使用计划指南的查询优化产生更大的影响。