如何创建计划指南 (SQL Server Management Studio)

本主题说明了如何使用 SQL Server Management Studio 创建计划指南。 计划指南通过将查询提示或固定查询计划附加到查询来影响查询优化。 在计划指南中,您需要指定要优化的 Transact-SQL 语句以及包含要使用的查询提示的 OPTION 子句或要用于优化查询的特定查询计划。 当查询执行时,查询优化器会将相应 Transact-SQL 语句与计划指南进行匹配,然后在运行时将此 OPTION 子句附加到查询,或使用指定的查询计划。

以下示例为 Transact-SQL 语句创建了一个计划指南,并将 FORCESEEK 查询提示应用到该语句。 该查询提示强制优化器使用索引查找操作来访问指定表中的数据。

创建计划指南示例

  1. 在对象资源管理器中,连接到 数据库引擎 实例,再展开该实例。

  2. 依次展开**“数据库”、AdventureWorks 数据库和“可编程性”**。

  3. 右键单击**“计划指南”,然后单击“新建计划指南”**。

  4. 在**“名称”**中,输入 ForceseekPlan 作为计划指南的名称。

  5. 在**“语句”**中,输入以下 Transact-SQL 语句。 这是要对其应用计划指南的语句。

    SELECT c.LastName, c.FirstName, HumanResources.Employee.Title
    FROM HumanResources.Employee
    JOIN Person.Contact AS c ON HumanResources.Employee.ContactID = c.ContactID
    WHERE HumanResources.Employee.ManagerID = 3 ORDER BY c.LastName, c.FirstName;
    
  6. 在**“作用域类型”**中,选择 SQL 作为显示 Transact-SQL 语句的实体的类型。

  7. 在**“提示”**中,输入以下 OPTION 子句。

    OPTION (TABLE HINT(HumanResources.Employee, FORCESEEK))
    
  8. 若要创建计划指南,请单击**“确定”**。

验证计划指南是否与查询匹配

  1. 启动一个 SQL Server Profiler跟踪,确保 Plan Guide SuccessfulPlan Guide Unsuccessful 事件类型均已选中(位于**“性能”**节点下面)。

  2. 运行在上一过程的步骤 5 中提供的查询。

  3. 暂停 SQL Server Profiler跟踪。

  4. Plan Guide Successful 事件中查找受影响的查询。

  5. 如果计划指南与查询不匹配,请确保查询完全是以在计划指南语句中指定的格式(字符对字符)提供的。 这包括制表符、空格、回车符或换行符。