您可以將固定查詢計劃套用至 OBJECT 或 SQL 類型的計劃指南。 當您知道現有執行計劃比優化器針對特定查詢所選取的計劃更好時,套用固定查詢計劃的計劃指南很有用。
下列範例會為簡單的臨時 SQL 指令建立規劃指南。 此語句所需的查詢計劃是在計劃指南中提供,方法是直接在 參數中指定查詢的 @hints XML Showplan。 此範例會先執行 SQL 語句,以在計劃快取中產生計劃。 假設針對此範例的目的,生成的計劃是所需的計劃,而且不需要進行額外的查詢優化。 查詢的 XML Showplan 是藉由查詢 sys.dm_exec_query_stats、 sys.dm_exec_sql_text和 sys.dm_exec_text_query_plan 動態管理檢視來取得,並指派給 @xml_showplan 變數。 變數 @xml_showplan 接著會傳遞至 sp_create_plan_guide 參數中的 @hints 語句。 或者,您可以使用 sp_create_plan_guide_from_handle 預存程式,從計劃快取中的查詢計劃建立計劃指南。
USE AdventureWorks2012;
GO
SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;
GO
DECLARE @xml_showplan nvarchar(max);
SET @xml_showplan = (SELECT query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp
WHERE st.text LIKE N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%');
EXEC sp_create_plan_guide
@name = N'Guide1_from_XML_showplan',
@stmt = N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = @xml_showplan;
GO