Sdílet prostřednictvím


Použít pevný plán dotazu na průvodce plánem

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Pevný plán dotazu můžete použít u průvodce plánem typu OBJECT nebo SQL. Příručky plánu, které používají plán s pevným dotazem, jsou užitečné, když víte o existujícím plánu provádění, který funguje lépe než plán vybraný optimalizátorem pro konkrétní dotaz.

Následující příklad vytvoří plánovací průvodce pro jednoduchý ad hoc příkaz SQL. Požadovaný plán dotazu pro tento příkaz je k dispozici v průvodci plánem zadáním plánu Showplan XML pro dotaz přímo v parametru @hints . Příklad nejprve spustí příkaz SQL, který vygeneruje plán v mezipaměti plánu. Pro účely tohoto příkladu se předpokládá, že vygenerovaný plán je požadovaný plán a nevyžaduje se žádné další ladění dotazů. Xml Showplan pro dotaz je získán dotazováním zobrazení sys.dm_exec_query_stats, sys.dm_exec_sql_text a sys.dm_exec_text_query_plan dynamického řízení a je přiřazen k proměnné @xml_showplan. Proměnná @xml_showplan se pak předá sp_create_plan_guide příkazu v parametru @hints . Nebo můžete vytvořit průvodce plánem z plánu dotazu v mezipaměti plánu pomocí sp_create_plan_guide_from_handle uložené procedury.

USE AdventureWorks2022;  
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