Udostępnij przez


Zastosuj stały plan zapytania do przewodnika planu

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Można zastosować stały plan zapytania do przewodnika planu typu OBJECT lub SQL. Przewodniki planowania, które stosują stały plan zapytania, są przydatne, gdy wiesz o istniejącym planie wykonywania, który działa lepiej niż ten wybrany przez optymalizator dla określonego zapytania.

W poniższym przykładzie omówiono sposób tworzenia dokumentacji planu dla prostej instrukcji ad hoc SQL. Żądany plan zapytania dla tej instrukcji jest dostarczony w przewodniku po planie przez określenie XML Showplan dla zapytania bezpośrednio w parametrze @hints. W przykładzie najpierw wykonywane jest polecenie SQL w celu wygenerowania planu w pamięci podręcznej dla planów. Na potrzeby tego przykładu zakłada się, że wygenerowany plan jest żądanym planem i nie jest wymagane żadne dodatkowe dostrajanie zapytań. Program Showplan XML dla zapytania jest uzyskiwany przez wykonywanie zapytań względem widoków dynamicznego zarządzania sys.dm_exec_query_stats, sys.dm_exec_sql_text oraz sys.dm_exec_text_query_plan i jest przypisywany do zmiennej @xml_showplan. Zmienna @xml_showplan jest następnie przekazywana do instrukcji sp_create_plan_guide w parametrze @hints . Możesz też utworzyć przewodnik planu na podstawie planu zapytania w pamięci podręcznej planu przy użyciu procedury składowanej sp_create_plan_guide_from_handle .

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