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:
Aby otrzymać sparametryzowana formularza kwerendy wykonywanie sp_get_query_template.
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.
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.