了解强制计划

更新日期: 2007 年 9 月 15 日

SQL Server 2005 引入了 USE PLAN 查询提示。USE PLAN 可以用于强制查询优化器为查询使用指定的查询计划。USE PLAN 查询提示通过接受希望以 XML 格式用作参数的查询计划发挥作用。USE PLAN 可用于其计划导致执行变慢但您知道还存在更好的计划的那些查询。有一种常见的情况是,在早期版本的 SQL Server 中有效执行的查询,在升级后的版本中执行状况不好,不管此升级是 Service Pack 还是完整的版本升级。大多数情况下,升级后,在多数查询执行时间内,查询性能与以前相同或比以前要好;但可能也有例外。可以使用 USE PLAN 查询提示处理这些情况:在早期产品版本中查询优化器选择的查询计划优先于升级后选择的查询计划。

解决部署的应用程序中查询性能较差的问题时,可以将 USE PLAN 查询提示与计划指南结合使用。如果您不能或不希望直接更改应用程序,可使用计划指南将查询提示应用于查询。有关计划指南的详细信息,请参阅使用计划指南在部署的应用程序中优化查询。有关说明如何在计划指南中应用 USE PLAN 查询提示的详细情况,请参阅计划强制方案:创建使用 USE PLAN 查询提示的计划指南计划强制方案:创建计划指南以强制实施从重写查询获得的计划

强制实施计划可用于多数类型的 SELECT 查询,包括对表、聚集索引和非聚集索引、索引视图以及已分区表和索引的查询。不能使用 INSERT、UPDATE 或 DELETE 语句来指定 USE PLAN。

使用 USE PLAN 查询提示生成的查询计划可像其他查询计划一样进行缓存。

强制计划的限制

强制计划限制只对查询使用单个的静态执行计划。强制计划使得查询优化器不再适于更改数据大小和数据分布、新索引以及其他变量。因此,如果错用强制计划,可能会导致出现性能问题。只有在充分使用了用于提高查询性能的其他方法(例如使用最新的精确统计信息和优化的索引)后,才可以使用强制计划。应谨慎使用强制计划,并且应仅由经验丰富的数据库管理员和开发人员(他们非常了解性能问题及变化的数据库和应用程序环境)使用。

使用 USE PLAN 查询提示影响在已部署的应用程序中编译查询时,应在计划指南中使用提示,而不是直接在应用程序中嵌入提示。这样,可以解决下列问题:

  • 可以在不修改或重新编译应用程序的情况下更改或删除提示。少数情况下,在某一版本的 SQL Server 中应用的 USE PLAN 提示可能无法应用于以后的 Service Pack 或发行版本中。因此,可能需要在部署了应用程序后更改或删除 USE PLAN 提示。
  • 可以避免直接在查询中使用大型提示。这样,查询就更容易进行读取。
    ms186343.note(zh-cn,SQL.90).gif重要提示:
    创建使用 USE PLAN 的计划指南时,应该在测试过程中验证,您希望强制执行其计划的查询是否通常使用游标请求提交。基于游标的查询的查询计划不同于那些非游标查询的查询计划。因此,计划指南必须指定游标计划,才能创建指定 USE PLAN 提示(应用于使用游标请求提交的查询)的计划指南。有关详细信息,请参阅对包含游标的查询使用 USE PLAN 查询提示

在 SQL Server 2005 中,对于下列类型的查询,不支持强制计划:

  • 带有动态游标、键集驱动游标和只进游标的查询。支持静态游标和快速只进游标。有关详细信息,请参阅对包含游标的查询使用 USE PLAN 查询提示
  • 分布式查询。
  • 全文查询。
  • 在 INSERT、DELETE 和 UPDATE 语句中。

请参阅

概念

使用计划强制来指定查询计划

其他资源

查询性能

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2007 年 9 月 15 日

更改的内容:
  • 更正了以下不准确的叙述:如果生成的字符串文字超过 8 KB,则将不对使用 USE PLAN 生成的查询计划进行缓存。