Partilhar via


Aplique um Plano de Consulta Estático a um Guia de Planos

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Pode aplicar um plano de consulta fixo a um guia de plano do tipo OBJECT ou SQL. Guias de plano que aplicam um plano de consulta fixa são úteis quando conhece um plano de execução existente que tem melhor desempenho do que aquele selecionado pelo otimizador para uma determinada consulta.

O exemplo seguinte cria um guia de plano para uma simples instrução SQL ad hoc. O plano de consulta desejado para esta instrução é fornecido no guia do plano, especificando o Plano de Apresentação XML para a consulta diretamente no @hints parâmetro. O exemplo executa primeiro a instrução SQL para gerar um plano na cache do plano. Para efeitos deste exemplo, assume-se que o plano gerado é o plano desejado e não é necessário ajuste adicional de consultas. O Showplan XML para a consulta é obtido consultando as vistas de gestão dinâmica sys.dm_exec_query_stats, sys.dm_exec_sql_text e sys.dm_exec_text_query_plan, sendo atribuído à variável @xml_showplan. A @xml_showplan variável é então passada para a sp_create_plan_guide instrução no @hints parâmetro. Ou, você pode criar um guia de plano a partir de um plano de consulta no cache de plano usando o procedimento armazenado 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