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:
Uzyskanie sparametryzowana formularza kwerendy przez wykonywanie sp_get_query_template.
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.
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.
Zobacz także