Menerapkan Rencana Kueri Tetap ke Panduan Paket

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Anda bisa menerapkan rencana kueri tetap ke panduan paket jenis OBJECT atau SQL. Panduan paket yang menerapkan rencana kueri tetap berguna saat Anda mengetahui tentang rencana eksekusi yang sudah ada yang berkinerja lebih baik daripada yang dipilih oleh pengoptimal untuk kueri tertentu.

Contoh berikut membuat panduan rencana untuk pernyataan SQL ad hoc sederhana. Rencana kueri yang diinginkan untuk pernyataan ini disediakan dalam panduan paket dengan menentukan Xml Showplan untuk kueri langsung dalam @hints parameter . Contoh pertama kali menjalankan pernyataan SQL untuk menghasilkan rencana dalam cache rencana. Untuk tujuan contoh ini, diasumsikan bahwa rencana yang dihasilkan adalah rencana yang diinginkan dan tidak diperlukan penyetelan kueri tambahan. Xml Showplan untuk kueri diperoleh dengan mengkueri sys.dm_exec_query_statstampilan manajemen dinamis , sys.dm_exec_sql_text, dan sys.dm_exec_text_query_plan dan ditetapkan ke @xml_showplan variabel . Variabel @xml_showplan kemudian diteruskan ke sp_create_plan_guide pernyataan dalam @hints parameter . Atau, Anda bisa membuat panduan paket dari rencana kueri di cache paket dengan menggunakan prosedur tersimpan 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