Udostępnij za pośrednictwem


Designing Plan Guides for Parameterized Queries

plan wykonania kwerendy można utworzyć na podstawie kwerendy, które jest parametrów.Kwerendy może zostać sparametryzowana jednego z następujących przyczyn:

  • Kwerenda jest przedstawione za pomocą sp_executesql.

  • Parametryzacja wymuszony jest włączona w bazie danych.Wszystkie kwerendy kwalifikujących się to parameterizes.

  • Oddzielne plan wykonania kwerendy została utworzona klasy z kwerendy, do której należy ta kwerenda, określając ich parametrów.

Po utworzeniu plan wykonania kwerendy na podstawie kwerendy parametryczne, plan wykonania kwerendy wykonania kwerendy dla wszystkich kwerend parameterize do tego samego formularza, ale różnią się zasadniczo tworzenie tylko w swoich stałych wartości literałów.Na przykład w bazie danych włączono wymuszone parametryzacji 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ć plan wykonania kwerendy kwerend parametrycznych, utworzenia plan wykonania kwerendy typu programu SQL i określić kwerendę w formie sparametryzowana sp_create_plan_guide procedura przechowywana.

Na przykład aby uzyskać sparametryzowana formularza jednej kwerendy w poprzednim przykładzie i utworzenia plan wykonania kwerendy w celu wymuszenia optymalizatora do używania łączyć mieszania, wykonaj następujące kroki:

  1. Aby otrzymać sparametryzowana formularza kwerendy wykonywanie sp_get_query_template.

  2. Jeśli kwerenda jest nie już są parametryzowane przez SQL Server za pomocą sp_executesql lub ZMUSZONY parametry bazy danych opcji zestaw utworzenia plan wykonania kwerendy typu TEMPLATE, aby wymusić parametry.

  3. Utworzenia plan wykonania kwerendy typu programu SQL dla kwerendy parametryczne.

Następujących zadań wsadowych wykonuje wszystkie trzy z następujących czynności:

--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)';

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