Projektowanie przewodników planu kwerend parametrycznych

Można utworzyć przewodnik planu na kwerendę jest sparametryzowana.Kwerendę można sparametryzowana jednego z następujących powodów:

  • Kwerenda jest przedstawione za pomocą sp_executesql.

  • Wymuszone parametryzacja jest włączone w bazie danych.Parameterizes wszystkie kwalifikujące się kwerendy.

  • Oddzielne przewodnik planu utworzono klasy kwerend, do których należy tę kwerendę, określając ich sparametryzowana.

Po utworzeniu przewodnik planu na kwerendę parametryczną zasadniczo tworzysz plan dla wszystkich kwerend, które parameterize do tego samego formularza, ale różnią się tylko w ich stała wartości literału.Na przykład w bazie danych włączono wymuszone parametryzacja następujące dwie kwerendy parameterize na tym samym formularzu:

SELECT pi.ProductID, SUM(pi.Quantity) AS Total 
FROM Production.ProductModel pm INNER JOIN Production.ProductInventory pi ON pm.ProductModelID = pi.ProductID 
WHERE pi.ProductID = 101 
GROUP BY pi.ProductID, pi.Quantity 
HAVING sum(pi.Quantity) > 50;

SELECT pi.ProductID, SUM(pi.Quantity) AS Total 
FROM Production.ProductModel pm INNER JOIN Production.ProductInventory pi ON pm.ProductModelID = pi.ProductID 
WHERE pi.ProductID = 101 
GROUP BY pi.ProductID, pi.Quantity 
HAVING sum(pi.Quantity) > 100;

Aby utworzyć prowadnicę przewodnik planu kwerend parametrycznych, utworzenia przewodnik planu typu SQL i określić formularz sparametryzowana kwerendy w sp_create_plan_guide procedura składowana.

Na przykład uzyskać sparametryzowana formularza jednej kwerendy w poprzednim przykładzie i utworzenia przewodnik planu na nim wymusić Optymalizator używać łączyć mieszania, wykonaj następujące kroki:

  1. Uzyskanie sparametryzowana formularza kwerendy przez wykonywanie sp_get_query_template.

  2. Jeśli kwerenda jest nie już są parametryzowane przez SQL Server za pomocą sp_executesql lub ZMUSZONY PARAMETRYZACJA zestaw opcji bazy danych, utworzenia przewodnik planu typu szablonu, aby wymusić parametryzacja.

  3. Utworzenia przewodnik planu typu SQL na sparametryzowanych kwerend.

Następujące partia wykonuje wszystkie trzy kroki:

--Obtain the paramaterized form of the query:
DECLARE @stmt nvarchar(max);
DECLARE @params nvarchar(max);
EXEC sp_get_query_template N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total 
    FROM Production.ProductModel pm 
    INNER JOIN Production.ProductInventory pi 
        ON pm.ProductModelID = pi.ProductID 
    WHERE pi.ProductID = 101 
    GROUP BY pi.ProductID, pi.Quantity 
    HAVING SUM(pi.Quantity) > 50',
@stmt OUTPUT, 
@params OUTPUT;
--Force parameterization of the query. (This step is only required
--if the query is not already being parameterized.)
EXEC sp_create_plan_guide N'TemplateGuide1', 
    @stmt, 
N'TEMPLATE', 
NULL, 
@params, 
N'OPTION(PARAMETERIZATION FORCED)';
--Create a plan guide on the parameterized query
EXEC sp_create_plan_guide N'GeneralizedGuide1', 
@stmt, 
N'SQL', 
NULL, 
@params, 
N'OPTION(HASH JOIN)';

przewodnik planu będzie teraz stosowane do wszystkich kwerend, które parameterize do określonego formularza, ale zawierają różne stała wartości literału.