Applicare un piano di query fisso a una guida di pianoApply a Fixed Query Plan to a Plan Guide

È possibile applicare un piano di query fisso a una guida di piano di tipo OBJECT o SQL.You can apply a fixed query plan to a plan guide of type OBJECT or SQL. Le guide di piano che applicano un piano di query fisso risultano utili quando per una specifica query esiste un piano di esecuzione che offre prestazioni migliori rispetto a quello selezionato da Query Optimizer.Plan guides that apply a fixed query plan are useful when you know about an existing execution plan that performs better than the one selected by the optimizer for a particular query.

Nell'esempio seguente viene creata una guida di piano per una semplice istruzione SQL ad hoc.The following example creates a plan guide for a simple ad hoc SQL statement. Il piano di query desiderato per questa istruzione è fornito nella guida di piano specificando lo Showplan XML per la query direttamente nel parametro @hints .The desired query plan for this statement is provided in the plan guide by specifying the XML Showplan for the query directly in the @hints parameter. Viene innanzitutto eseguita l'istruzione SQL per generare un piano nella cache dei piani.The example first executes the SQL statement to generate a plan in the plan cache. Ai fini di questo esempio, si presuppone che il piano generato sia il piano desiderato, senza che sia richiesta alcuna ottimizzazione aggiuntiva della query.For the purposes of this example, it is assumed that the generated plan is the desired plan and no additional query tuning is required. Lo Showplan XML per la query si ottiene eseguendo una query sulle viste a gestione dinamica sys.dm_exec_query_stats, sys.dm_exec_sql_texte sys.dm_exec_text_query_plan e assegnandolo alla variabile @xml_showplan .The XML Showplan for the query is obtained by querying the sys.dm_exec_query_stats, sys.dm_exec_sql_text, and sys.dm_exec_text_query_plan dynamic management views and is assigned to the @xml_showplan variable. La variabile @xml_showplan passa quindi all'istruzione sp_create_plan_guide nel parametro @hints .The @xml_showplan variable is then passed to the sp_create_plan_guide statement in the @hints parameter. In alternativa, è possibile creare una guida di piano da un piano di query nella cache dei piani usando la stored procedure sp_create_plan_guide_from_handle .Or, you can create a plan guide from a query plan in the plan cache by using the sp_create_plan_guide_from_handle stored procedure.

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