Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Pokud je možnost PARAMETRIZACE databáze nastavena na SIMPLE, optimalizátor dotazů SQL Serveru se může rozhodnout parametrizovat dotazy. To znamená, že všechny hodnoty literálů obsažené v dotazu se nahradí parametry. Tento proces se označuje jako jednoduchá parametrizace. Pokud se používá parametrizace SIMPLE, nemůžete určit, které dotazy jsou parametrizovány a které dotazy nejsou. Můžete však určit, že všechny dotazy v databázi budou parametrizovány nastavením parametrIZACE databáze na HODNOTU FORCED. Tento proces se označuje jako vynucené parametrizace.
Chování parametrizace databáze můžete přepsat pomocí příruček plánu následujícími způsoby:
Pokud je možnost PARAMETRIZACE databáze nastavena na SIMPLE, můžete určit, že vynucené parametrizace se pokusí o určitou třídu dotazů. Provedete to tak, že vytvoříte příručku plánů ŠABLONy na parametrizované formě dotazu a v uložené proceduře sp_create_plan_guide uvedete hint dotazu PARAMETERIZATION FORCED. Tento druh průvodce plánem můžete považovat za způsob, jak povolit vynucené parametrizace pouze u určité třídy dotazů místo všech dotazů. Další informace o jednoduché parametrizaci naleznete v Průvodce architekturou zpracování dotazů.
Pokud je možnost PARAMETRIZACE databáze nastavena na VYNUCENO, můžete určit, že pro určitou skupinu dotazů se použije pouze jednoduchá parametrizace, nikoli vynucená parametrizace. Toto provedete vytvořením průvodce šablonou plánu pro vynucenou parametrizovanou formu dotazu a zadáním nápovědy pro dotaz PARAMETRIZACE JEDNODUCHÁ v sp_create_plan_guide. Další informace o vynucené parametrizaci naleznete v Průvodce architekturou zpracování dotazů.
Zvažte následující dotaz na databázi AdventureWorks2022
:
SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi
ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity HAVING SUM(pi.Quantity) > 50;
Jako správce databáze jste zjistili, že nechcete povolit vynucené parametrizace u všech dotazů v databázi. Chcete se však vyhnout nákladům na kompilaci u všech dotazů, které jsou syntakticky ekvivalentní předchozímu dotazu, ale liší se pouze v jejich konstantních literálových hodnotách. Jinými slovy, chcete, aby byl dotaz parametrizován tak, aby byl znovu použit plán dotazu pro tento druh dotazu. V tomto případě proveďte následující kroky:
Načtěte parametrizovanou formu dotazu. Jediný bezpečný způsob, jak tuto hodnotu získat pro použití v sp_create_plan_guide, je pomocí systémové uložené procedury sp_get_query_template.
Vytvořte průvodce plánem v parametrizované podobě dotazu a specifikujte hint dotazu PARAMETERIZATION FORCED.
Důležitý
Jako součást parametrizace dotazu sql Server přiřadí datový typ parametrům, které nahradí hodnoty literálu v závislosti na hodnotě a velikosti literálu. Stejný proces probíhá u hodnot konstantních literálů předaných výstupnímu parametru @stmt příkazu sp_get_query_template. Vzhledem k tomu, že datový typ zadaný v argumentu @paramssp_create_plan_guide se musí shodovat s dotazem, protože je parametrizován SQL Serverem, bude pravděpodobně nutné vytvořit více než jednoho průvodce plánem, který bude zahrnovat úplný rozsah možných hodnot parametrů dotazu.
K získání parametrizovaného dotazu a následnému vytvoření průvodce plánem můžete použít následující skript:
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 AS pm
INNER JOIN Production.ProductInventory AS 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;
EXEC sp_create_plan_guide
N'TemplateGuide1',
@stmt,
N'TEMPLATE',
NULL,
@params,
N'OPTION(PARAMETERIZATION FORCED)';
Podobně v databázi, ve které je vynucená parametrizace již povolena, můžete zajistit, aby ukázkový dotaz a ostatní, které jsou syntakticky ekvivalentní, s výjimkou jejich konstantních literálových hodnot, byly parametrizovány podle pravidel jednoduché parametrizace. Chcete-li to provést, zadejte PARAMETRIZACE SIMPLE místo PARAMETRIZACE VYNUCENÉ v části OPTION.
Poznámka
Průvodci šablonovým plánem přiřazují příkazy k dotazům odeslaným v dávkách, které se skládají pouze z jednoho příkazu. Příkazy uvnitř dávek s více statistikami nemají nárok na to, aby se shodovaly s průvodci plánem ŠABLONy.