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
koncový bod analytiky SQL v Microsoft Fabric
Warehouse v Microsoft Fabric
databázi SQL v Microsoft Fabric
Nápovědy dotazu určují, že se uvedené rady používají v oboru dotazu. Ovlivňují všechny operátory v příkazu. Pokud UNION
je součástí hlavního dotazu, může klauzuli obsahovat OPTION
pouze poslední dotaz zahrnující UNION
operaci. Nápovědy dotazu jsou určeny jako součást klauzule OPTION. K chybě 8622 dochází v případě, že jeden nebo více tipů dotazu způsobí, že Optimalizátor dotazů nevygeneruje platný plán.
Upozornění
Vzhledem k tomu, že optimalizátor dotazů SQL Serveru obvykle vybírá nejlepší plán provádění dotazu, doporučujeme jako poslední možnost použít pouze rady pro zkušené vývojáře a správce databází.
platí pro:
Syntaxe
<query_hint> ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| DISABLE_OPTIMIZED_PLAN_FORCING
| EXPAND VIEWS
| FAST <integer_value>
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
| { FORCE | DISABLE } SCALEOUTEXECUTION
| IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
| KEEP PLAN
| KEEPFIXED PLAN
| MAX_GRANT_PERCENT = <numeric_value>
| MIN_GRANT_PERCENT = <numeric_value>
| MAXDOP <integer_value>
| MAXRECURSION <integer_value>
| NO_PERFORMANCE_SPOOL
| OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ...n ] )
| OPTIMIZE FOR UNKNOWN
| PARAMETERIZATION { SIMPLE | FORCED }
| QUERYTRACEON <integer_value>
| RECOMPILE
| ROBUST PLAN
| USE HINT ( 'hint_name' [ , ...n ] )
| USE PLAN N'<xml_plan>'
| TABLE HINT ( <exposed_object_name> [ , <table_hint> [ [ , ] ...n ] ] )
| FOR TIMESTAMP AS OF '<point_in_time>'
}
<table_hint> ::=
{ NOEXPAND [ , INDEX ( <index_value> [ , ...n ] ) | INDEX = ( <index_value> ) ]
| INDEX ( <index_value> [ , ...n ] ) | INDEX = ( <index_value> )
| FORCESEEK [ ( <index_value> ( <index_column_name> [ , ... ] ) ) ]
| FORCESCAN
| HOLDLOCK
| NOLOCK
| NOWAIT
| PAGLOCK
| READCOMMITTED
| READCOMMITTEDLOCK
| READPAST
| READUNCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| SNAPSHOT
| SPATIAL_WINDOW_MAX_CELLS = <integer_value>
| TABLOCK
| TABLOCKX
| UPDLOCK
| XLOCK
}
Argumenty
{ HASH | ORDER } GROUP
Určuje, že agregace, které popisuje dotaz GROUP BY
nebo DISTINCT
klauzule, by měly používat hashování nebo řazení.
- Obecně platí, že algoritmus založený na hodnotě hash může zlepšit výkon dotazů, které zahrnují velké nebo složité sady seskupení.
- Obecně platí, že algoritmus založený na řazení může zlepšit výkon dotazů, které zahrnují malé nebo jednoduché sady seskupení.
{ MERGE | HASH | CONCAT } UNION
Určuje, že se všechny UNION
operace spouštějí sloučením, hashováním nebo zřetězením UNION
sad. Pokud je zadáno více než jeden UNION
tip, optimalizátor dotazů vybere z uvedených tipů nejnákladnější strategii.
- Obecně platí, že operace algoritmu založeného na sloučení může zlepšit výkon dotazů, které zahrnují seřazené vstupy.
- Obecně platí, že algoritmus založený na hodnotě hash může zlepšit výkon dotazů, které zahrnují neseřazené nebo velké vstupy.
- Obecně platí, že algoritmus založený na zřetězení může zlepšit výkon dotazů, které zahrnují odlišné nebo malé vstupy.
{ LOOP | MERGE | HASH } JOIN
Určuje, že všechny operace spojení provádí LOOP JOIN
, MERGE JOIN
nebo HASH JOIN
v celém dotazu. Pokud zadáte více než jednu nápovědu pro spojení, optimalizátor vybere z povolených strategií nejnákladnější strategii spojení.
Pokud pro konkrétní dvojici tabulek zadáte nápovědu spojení ve stejné klauzuli dotazu FROM
, má tento tip spojení přednost před spojením obou tabulek. Přesto musí být dodrženy rady pro dotazy. Tip spojení pro dvojici tabulek může omezit pouze výběr povolených metod spojení v nápovědě dotazu. Další informace najdete v nápovědě ke spojení.
DISABLE_OPTIMIZED_PLAN_FORCING
platí pro: SQL Server (počínaje SQL Serverem 2022 (16.x))
Zakáže optimalizovaný plán vynucení dotazu.
Optimalizovaný plán vynucuje snížení režie kompilace pro opakující se vynucené dotazy. Jakmile se vygeneruje plán spouštění dotazů, uloží se konkrétní kroky kompilace pro opakované použití jako skript pro přehrání optimalizace. Skript pro přehrání optimalizace je uložen jako součást komprimovaného souboru XML plánu showplan v úložiště dotazů, ve skrytém atributu OptimizationReplay
.
ROZBALIT ZOBRAZENÍ
Určuje, že se indexovaná zobrazení rozbalí. Určuje také, že optimalizátor dotazů nebere v úvahu žádné indexované zobrazení jako náhradu za jakoukoli část dotazu. Zobrazení se rozbalí, když definice zobrazení nahradí název zobrazení v textu dotazu.
Tento dotaz prakticky zakáže přímé použití indexovaných zobrazení a indexů v indexovaných zobrazeních v plánu dotazu.
Poznámka:
Indexované zobrazení zůstává zhuštěné, pokud je v části dotazu SELECT
přímý odkaz na zobrazení. Zobrazení zůstává také zhuštěno, pokud zadáte WITH (NOEXPAND)
nebo WITH (NOEXPAND, INDEX( <index_value> [ , *...n* ] ) )
. Další informace o nápovědě NOEXPAND
k dotazu naleznete v tématu Použití funkce NOEXPAND.
Nápověda má vliv pouze na zobrazení v části příkazů SELECT
, včetně těchto zobrazení v INSERT
, UPDATE
, MERGE
a DELETE
příkazů.
FAST integer_value
Určuje, že dotaz je optimalizovaný pro rychlé načtení prvního integer_value počtu řádků. Tento výsledek je nezáporné celé číslo. Jakmile se vrátí první integer_value počet řádků, dotaz pokračuje v provádění a vytvoří úplnou sadu výsledků.
FORCE ORDER
Určuje, že pořadí spojení označené syntaxí dotazu se během optimalizace dotazu zachová. Použití FORCE ORDER
nemá vliv na možné chování optimalizátoru dotazů.
FORCE ORDER
zachová pořadí spojení zadané v dotazu, které může zlepšit výkon nebo konzistenci dotazů, které zahrnují složité podmínky spojení nebo rady.
Poznámka:
MERGE
V příkazu je zdrojová tabulka přístupná před cílovou tabulkou jako výchozí pořadí spojení, pokud WHEN SOURCE NOT MATCHED
není zadaná klauzule. Zadání FORCE ORDER
zachovává toto výchozí chování.
{ FORCE | DISABLE } EXTERNALPUSHDOWN
Vynuťte nebo zakažte posun výpočtů opravňujících výrazů v Hadoopu. Platí pouze pro dotazy používající PolyBase. Nenasdílí se do úložiště Azure.
{ FORCE | DISABLE } SCALEOUTEXECUTION
Vynuťte nebo zakažte spouštění dotazů PolyBase, které používají externí tabulky v clusterech s velkými objemy dat SQL Serveru 2019. Tento tip je dodržen pouze dotazem, který používá hlavní instanci clusteru SQL Pro velké objemy dat. Horizontální navýšení kapacity probíhá napříč výpočetním fondem clusteru s velkými objemy dat.
KEEP PLAN
Změní prahové hodnoty rekompilace dočasných tabulek a vytvoří je stejně jako prahové hodnoty pro trvalé tabulky. Odhadovaná prahová hodnota rekompilu spustí automatické překompilování dotazu, když se v tabulce provede odhadovaný počet změn indexovaného sloupce spuštěním jednoho z následujících příkazů:
UPDATE
DELETE
MERGE
INSERT
Zadání KEEP PLAN
zajistí, aby se dotaz nepřekompiloval tak často, když je v tabulce více aktualizací.
KEEPFIXED PLAN
Vynutí optimalizátor dotazů, aby dotaz nepřekompilovat kvůli změnám ve statistikách. Zadání KEEPFIXED PLAN
zajistí, že se dotaz znovu zkompilí pouze v případě, že se změní schéma podkladových tabulek nebo pokud sp_recompile
se spustí v těchto tabulkách.
IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
Platí pro: SQL Server (počínaje SQL Serverem 2012 (11.x)).
Zabrání dotazu v použití neclusterovaného indexu columnstore optimalizovaného pro paměť. Pokud dotaz obsahuje nápovědu k dotazu, aby se zabránilo použití indexu columnstore a nápovědě indexu pro použití indexu columnstore, jsou rady v konfliktu a dotaz vrátí chybu.
MAX_GRANT_PERCENT = <numeric_value>
Platí pro: SQL Server (počínaje aktualizací SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 a Azure SQL Database.
Maximální velikost přidělení paměti v PERCENT
nakonfigurovaných limitech paměti. Pokud dotaz běží v uživatelem definovaném fondu zdrojů, není zaručeno, že tento limit nepřekročí. V takovém případě pokud dotaz nemá minimální požadovanou paměť, systém vyvolá chybu. Pokud je dotaz spuštěný ve fondu systému (výchozí), získá minimálně paměť potřebnou ke spuštění. Skutečný limit může být nižší, pokud je nastavení Správce prostředků nižší než hodnota zadaná tímto tipem. Platné hodnoty jsou mezi 0,0 a 100,0.
Nápověda pro udělení paměti není k dispozici pro vytvoření indexu nebo opětovné sestavení indexu.
MIN_GRANT_PERCENT = <numeric_value>
Platí pro: SQL Server (počínaje aktualizací SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 a Azure SQL Database.
Minimální velikost přidělení paměti v PERCENT
nakonfigurovaných limitech paměti. Dotaz je zaručený, MAX(required memory, min grant)
protože k spuštění dotazu je potřeba alespoň požadovaná paměť. Platné hodnoty jsou mezi 0,0 a 100,0.
Možnost udělení paměti min_grant_percent přepíše sp_configure
možnost (minimální paměť na dotaz (kB) bez ohledu na velikost. Nápověda pro udělení paměti není k dispozici pro vytvoření indexu nebo opětovné sestavení indexu.
INTEGER_VALUE MAXDOP <>
Platí pro: SQL Server (počínaje SQL Serverem 2008 (10.0.x)) a službou Azure SQL Database.
Přepíše maximální stupeň konfigurace paralelismu možnost sp_configure
. Také přepíše správce prostředků pro dotaz určující tuto možnost. Tip MAXDOP
dotazu může překročit hodnotu nakonfigurovanou pro sp_configure
. Pokud MAXDOP
překročí hodnotu nakonfigurovanou správcem prostředků, použije databázový stroj hodnotu Správce MAXDOP
prostředků popsanou ve skupině ALTER WORKLOAD GROUP. Všechna sémantická pravidla používaná s maximálním stupněm konfigurace paralelismu se použijí při použití nápovědy MAXDOP
k dotazu. Další informace najdete v tématu Konfigurace maximálního stupně paralelismu Možnosti konfigurace serveru.
Výstraha
Pokud MAXDOP
je nastavená na nulu, server zvolí maximální stupeň paralelismu.
INTEGER_VALUE MAXRECURSION <>
Určuje maximální počet rekurzí povolených pro tento dotaz. Argument číslo je kladné celé číslo od 0 do 32 767. Při zadání hodnoty 0 se nepoužije žádný limit. Pokud tato možnost není zadaná, výchozí limit pro server je 100.
Když se během provádění dotazu dosáhne zadaného nebo výchozího čísla limitu MAXRECURSION
, dotaz skončí a vrátí chybu.
Z důvodu této chyby jsou všechny účinky příkazu vráceny zpět. Pokud je příkaz příkazem SELECT
, můžou se vrátit částečné výsledky nebo žádné výsledky. Vrácené částečné výsledky nemusí zahrnovat všechny řádky na úrovních rekurze nad zadanou maximální rekurzní úrovní.
Další informace najdete v tématu WITH common_table_expression.
NO_PERFORMANCE_SPOOL
Platí pro: SQL Server (počínaje SQL Serverem 2016 (13.x)) a službou Azure SQL Database.
Zabrání přidání operátoru zařazování do plánů dotazů (s výjimkou plánů, pokud je fond nutný k zajištění platné sémantiky aktualizace). Operátor zařazování může v některých scénářích snížit výkon. Například fond používá tempdb
a tempdb
kolize může nastat, pokud existuje mnoho souběžných dotazů spuštěných s operacemi zařazování.
OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ... n ] )
Dává optimalizátoru dotazů pokyn, aby při kompilaci a optimalizaci dotazu použil konkrétní hodnotu pro místní proměnnou. Hodnota se používá pouze při optimalizaci dotazu, a ne během provádění dotazu.
@variable_name
Název místní proměnné použité v dotazu, ke kterému je možné přiřadit hodnotu pro použití s nápovědou
OPTIMIZE FOR
k dotazu.UNKNOWN
Určuje, že Optimalizátor dotazů používá statistická data místo počáteční hodnoty k určení hodnoty pro místní proměnnou během optimalizace dotazu.
literal_constant
Hodnota literálové konstanty, která se má přiřadit @variable_name pro použití s nápovědou
OPTIMIZE FOR
k dotazu. literal_constant se používá pouze při optimalizaci dotazů, a ne jako hodnota @variable_name během provádění dotazu. literal_constant může být libovolného systémového datového typu SQL Serveru, který lze vyjádřit jako literálovou konstantu. Datový typ literal_constant musí být implicitně konvertibilní na datový typ, který @variable_name odkazy v dotazu.
OPTIMIZE FOR může tlačit výchozí chování detekce parametrů optimalizátoru. Můžete také použít OPTIMIZE FOR
při vytváření průvodců plánem. Další informace naleznete v tématu Rekompilovat uloženou proceduru.
OPTIMALIZACE PRO NEZNÁMÉ
Dává optimalizátoru dotazů pokyn, aby při kompilaci a optimalizaci dotazu použil průměrnou selektivitu predikátu ve všech hodnotách sloupců místo použití hodnoty parametru runtime.
Pokud používáte OPTIMIZE FOR @variable_name = <literal_constant>
a OPTIMIZE FOR UNKNOWN
používáte stejnou nápovědu k dotazu, použije optimalizátor dotazů literal_constant určenou pro konkrétní hodnotu. Optimalizátor dotazů používá funkci UNKNOWN pro zbývající hodnoty proměnných. Hodnoty se používají pouze při optimalizaci dotazů, a ne během provádění dotazu.
PARAMETRIZACE { SIMPLE | FORCED }
Určuje pravidla parametrizace, která optimalizátor dotazů SQL Serveru platí pro dotaz při kompilaci.
Důležité
Nápovědu PARAMETERIZATION
dotazu je možné zadat pouze v průvodci plánem, aby se přepsaly aktuální nastavení PARAMETERIZATION
možnosti databáze SET
. Nedá se zadat přímo v dotazu.
Další informace naleznete v tématu Určení chování parametrizace dotazu pomocí průvodců plánem.
SIMPLE
dává optimalizátoru dotazů pokyn k pokusu o jednoduchou parametrizaci.
FORCED
dává optimalizátoru dotazů pokyn k pokusu o vynucené parametrizace. Další informace naleznete v tématu Vynucené parametrizace v Průvodci architekturou zpracování dotazů a jednoduché parametrizace v Průvodci architekturou zpracování dotazů.
INTEGER_VALUE QUERYTRACEON <>
Tato možnost umožňuje povolit příznak trasování ovlivňující plán pouze během kompilace s jedním dotazem. Podobně jako u jiných možností na úrovni dotazu ho můžete použít společně s vodítky plánu tak, aby odpovídaly textu dotazu spouštěného z jakékoli relace, a při kompilaci tohoto dotazu automaticky použít příznak trasování, který má vliv na plán. Tato QUERYTRACEON
možnost je podporovaná pouze pro příznaky trasování Optimalizátoru dotazů. Další informace najdete v tématu příznaky trasování.
Použití této možnosti nevrací žádnou chybu nebo upozornění, pokud se použije nepodporované číslo příznaku trasování. Pokud zadaný příznak trasování není ten, který má vliv na plán provádění dotazu, je tato možnost bezobslužně ignorována.
Pokud chcete v dotazu použít více než jeden příznak trasování, zadejte jeden QUERYTRACEON
tip pro každé jiné číslo příznaku trasování.
PŘEKOMPILOVAT
Dává databázovému stroji SQL Serveru pokyn, aby vygeneroval nový dočasný plán dotazu a okamžitě tento plán zahodil po dokončení provádění dotazu. Vygenerovaný plán dotazů nenahrazuje plán uložený v mezipaměti, když se stejný dotaz spustí bez nápovědy RECOMPILE
. Bez zadání RECOMPILE
ukládá databázový stroj plány dotazů do mezipaměti a znovu je používá. Při kompilaci RECOMPILE
plánů dotazů se v nápovědě dotazu používají aktuální hodnoty všech místních proměnných v dotazu. Pokud je dotaz uvnitř uložené procedury, aktuální hodnoty předané všem parametrům.
RECOMPILE
je užitečná alternativa k vytvoření uložené procedury.
RECOMPILE
WITH RECOMPILE
používá klauzuli, pokud musí být rekompilována pouze podmnožina dotazů uvnitř uložené procedury, nikoli celá uložená procedura. Další informace naleznete v tématu Rekompilovat uloženou proceduru.
RECOMPILE
je také užitečný při vytváření průvodců plánem.
ROBUSTNÍ PLÁN
Vynutí Optimalizátor dotazů vyzkoušet plán, který funguje pro maximální možnou velikost řádku, pravděpodobně na úkor výkonu. Při zpracování dotazu můžou být přechodné tabulky a operátory muset při zpracování dotazu ukládat a zpracovávat řádky, které jsou širší než kterýkoli ze vstupních řádků. Řádky můžou být tak široké, že konkrétní operátor někdy nemůže řádek zpracovat. Pokud jsou řádky široké, databázový stroj během provádění dotazu vyvolá chybu. Pomocí příkazu ROBUST PLAN
optimalizátoru dotazů neberete v úvahu žádné plány dotazů, které by mohly narazit na tento problém.
Pokud takový plán není možný, vrátí optimalizátor dotazů místo odložení detekce chyb provádění dotazů chybu. Řádky mohou obsahovat sloupce s proměnnou délkou; Databázový stroj umožňuje definovat řádky, které mají maximální možnou velikost nad rámec schopnosti databázového stroje je zpracovat. Obecně platí, že i přes maximální možnou velikost aplikace ukládá řádky, které mají skutečné velikosti v mezích, které databázový stroj může zpracovat. Pokud databázový stroj narazí na řádek, který je příliš dlouhý, vrátí se chyba spuštění.
USE HINT ( 'hint_name' )
Platí pro: SQL Server (počínaje SQL Serverem 2016 (13.x) SP1), Azure SQL Database a Azure SQL Managed Instance.
Poskytuje jeden nebo více dalších tipů pro procesor dotazů. Další rady se zadají s názvem nápovědy uvnitř jednoduchých uvozovek.
Návod
Názvy nápovědy nerozlišují malá a velká písmena.
Podporují se následující názvy nápovědy:
Náznak | Popis |
---|---|
'ABORT_QUERY_EXECUTION'
|
Blokuje provádění dotazů. Cílem je použít jako nápovědu k úložišti dotazů , aby správci mohli blokovat budoucí spouštění známých problematických dotazů, například nesprávné dotazy, které mají vliv na úlohy aplikace. Další informace najdete v tématu Blokování budoucího provádění problematických dotazů. Platí pro: Azure SQL Database a SQL Server 2025 (17.x) Preview. Tento tip je ve verzi Preview. |
'ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP' |
Model odhadu kardinality pro REGEXP_LIKE poskytuje výchozí hodnoty selektivity. Tuto nápovědu použijte, pokud je výchozí odhad příliš vysoký. Nastaví selektivitu na pevnou nižší selektivitu. Platí pro: SQL Server 2025 (17.x) Preview a novější verze a Azure SQL Database |
'ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP' |
Model odhadu kardinality pro REGEXP_LIKE poskytuje výchozí hodnoty selektivity. Tento tip použijte, pokud je výchozí odhad příliš nízký. Nastaví selektivitu na pevnou vyšší selektivitu. Platí pro: SQL Server 2025 (17.x) Preview a novější verze a Azure SQL Database |
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
|
Vygeneruje plán dotazu s použitím předpokladu jednoduchého zahrnutí místo výchozího základního omezení pro spojení v rámci modelu odhadu kardinality optimalizátoru dotazů SQL Serveru 2014 (12.x) a novějších verzí. Tento název nápovědy odpovídá příznaku trasování 9476. |
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
|
Vygeneruje plán s minimální selektivitou při odhadu predikátů AND pro filtry, které budou zohledňovat úplnou korelaci. Tento název nápovědy je ekvivalentní příznaku trasování 4137 při použití s modelem odhadu kardinality SYSTÉMU SQL Server 2012 (11.x) a starších verzí a má podobný účinek, když se příznak trasování 9471 používá s modelem odhadu kardinality SQL Serveru 2014 (12.x) a novějšími verzemi. |
'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES' |
Vygeneruje plán s maximální selektivitou při odhadu predikátů AND pro filtry, které budou zohledňovat plnou nezávislost. Tento název nápovědy je výchozím chováním modelu odhadu kardinality systému SQL Server 2012 (11.x) a starších verzí a ekvivalentem příznaku trasování 9472 při použití s modelem odhadu kardinality SQL Serveru 2014 (12.x) a novějšími verzemi. platí pro: Azure SQL Database |
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' |
Vygeneruje plán, který používá nejvíce k nejnižší selektivitě při odhadu predikátů AND pro filtry, které budou zohledňovat částečnou korelaci. Tento název nápovědy je výchozím chováním modelu odhadu kardinality systému SQL Server 2014 (12.x) a novějších verzí. platí pro: Azure SQL Database |
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' |
Zakáže adaptivní spojení v dávkovém režimu. Další informace najdete v tématu Adaptivní spojení v režimu Batch. platí pro: SQL Server 2017 (14.x) a novější verze a Azure SQL Database |
'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK' |
Zakáže zpětnou vazbu k udělení paměti v dávkovém režimu. Další informace naleznete v tématu Dávkové režim paměti udělovat zpětnou vazbu. platí pro: SQL Server 2017 (14.x) a novější verze a Azure SQL Database |
'DISABLE_DEFERRED_COMPILATION_TV' |
Zakáže odloženou kompilaci proměnné tabulky. Další informace najdete v tématu odložené kompilace proměnné tabulky. platí pro: SQL Server 2019 (15.x) a novější verze a Azure SQL Database |
'DISABLE_INTERLEAVED_EXECUTION_TVF' |
Zakáže prokládání provádění pro funkce tabulek s více příkazy. Další informace naleznete v tématu Prokládání provádění pro funkce tabulek s více příkazy. platí pro: SQL Server 2017 (14.x) a novější verze a Azure SQL Database |
'DISABLE_OPTIMIZED_HALLOWEEN_PROTECTION' |
Zakáže optimalizovanou ochranu Halloween. Další informace naleznete v tématu Optimalizovaná halloween ochrana Platí pro: SQL Server 2025 (17.x) Preview |
'DISABLE_OPTIMIZED_NESTED_LOOP' |
Dává procesoru dotazů pokyn, aby při generování plánu dotazu nepoužít operaci řazení (dávkové řazení) pro optimalizovaná spojení vnořených smyček. Tento název nápovědy je ekvivalentní příznaku trasování 2340. Tento tip platí také pro explicitní řazení a dávkové řazení. |
'DISABLE_OPTIMIZER_ROWGOAL'
|
Způsobí, že SQL Server vygeneruje plán, který nepoužívá úpravy cíle řádku s dotazy, které obsahují tato klíčová slova: - TOP - OPTION (FAST N) - IN - EXISTS Tento název nápovědy odpovídá příznaku trasování 4138. |
'DISABLE_PARAMETER_SNIFFING' |
Dává optimalizátoru dotazů pokyn, aby při kompilaci dotazu použil průměrnou distribuci dat s jedním nebo více parametry. Tato instrukce zpřístupňuje plán dotazu nezávisle na hodnotě parametru, která se poprvé použila při kompilaci dotazu. Tento název nápovědy je ekvivalentní nastavení PARAMETER_SNIFFING = OFF konfigurace příznaku trasování 4136 nebo databáze s vymezeným oborem . |
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' |
Zakáže zpětnou vazbu v režimu řádků. Další informace najdete v tématu o udělení zpětné vazby v režimu řádků. platí pro: SQL Server 2019 (15.x) a novější verze a Azure SQL Database |
'DISABLE_TSQL_SCALAR_UDF_INLINING' |
Zakáže inlineing skalárního definovaného uživatelem. Další informace najdete v tématu Inlining skalárních funkcí definované uživatelem. platí pro: SQL Server 2019 (15.x) a novější verze a Azure SQL Database |
'DISALLOW_BATCH_MODE' |
Zakáže provádění dávkového režimu. Další informace naleznete v tématu Režimy provádění. platí pro: SQL Server 2019 (15.x) a novější verze a Azure SQL Database |
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS' |
Umožňuje automaticky generovat rychlé statistiky (dodatek histogramu) pro libovolný úvodní indexový sloupec, pro který je potřebný odhad kardinality. Histogram použitý k odhadu kardinality se upraví v době kompilace dotazu tak, aby odpovídal skutečnému maximu nebo minimální hodnotě tohoto sloupce. Tento název nápovědy odpovídá příznaku trasování 4139. |
'ENABLE_OPTIMIZED_HALLOWEEN_PROTECTION' |
Umožňuje optimalizovanou ochranu Halloween. Další informace naleznete v tématu Optimalizovaná Halloween ochrana. Platí pro: SQL Server 2025 (17.x) Preview |
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' |
Povolí opravy hotfix optimalizátoru dotazů (změny vydané v kumulativních aktualizacích a aktualizacích Service Pack systému SQL Server). Tento název nápovědy je ekvivalentní nastavení QUERY_OPTIMIZER_HOTFIXES = ON konfigurace příznaku trasování 4199 nebo databáze s vymezeným oborem . |
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' |
Vynutí optimalizátoru dotazů použití modelu odhadu kardinality , který odpovídá aktuální úrovni kompatibility databáze. Tento tip použijte k přepsání nastavení LEGACY_CARDINALITY_ESTIMATION = ON konfigurace s vymezeným oborem databáze nebo příznaku trasování 9481. |
'FORCE_LEGACY_CARDINALITY_ESTIMATION'
|
Vynutí optimalizátoru dotazů použití modelu odhadu kardinality systému SQL Server 2012 (11.x) a starších verzí. Tento název nápovědy je ekvivalentní nastavení LEGACY_CARDINALITY_ESTIMATION = ON konfigurace s příznakem trasování 9481 nebo databáze s vymezeným oborem . |
'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
1 |
Vynutí chování optimalizátoru dotazů na úrovni dotazu. K tomuto chování dochází, jako kdyby byl dotaz zkompilován s úrovní kompatibility databáze n, kde n je podporovaná úroveň kompatibility databáze. Seznam aktuálně podporovaných hodnot pro n najdete v tématu sys.dm_exec_valid_use_hints. Platí pro: SQL Server 2017 (14.x) CU 10 a novější verze a Azure SQL Database |
'QUERY_PLAN_PROFILE'
2 |
Umožňuje zjednodušené profilování pro dotaz. Když se dotaz obsahující tento nový tip dokončí, aktivuje se nová rozšířená událost query_plan_profile . Tato rozšířená událost zveřejňuje statistiky provádění a skutečný plán provádění XML podobný query_post_execution_showplan rozšířené události, ale pouze pro dotazy, které obsahují novou nápovědu.Platí pro: SQL Server 2016 (13.x) SP 2 CU 3, SQL Server 2017 (14.x) CU 11 a novější verze |
1 Tip QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n
nepřepíše výchozí nebo starší nastavení odhadu kardinality, pokud ho vynutíte prostřednictvím konfigurace s vymezeným oborem databáze, příznaku trasování nebo jiného tipu dotazu, například QUERYTRACEON
. Tento tip má vliv pouze na chování optimalizátoru dotazů. Nemá vliv na další funkce SQL Serveru, které můžou záviset na úrovni kompatibility databáze, jako je dostupnost určitých databázových funkcí. Další informace najdete v tématu Volba vývojáře: Nápověda k modelu provádění dotazů.
2 Pokud povolíte shromažďování query_post_execution_showplan
rozšířené události, přidá se standardní infrastruktura profilace do každého dotazu, který běží na serveru, a proto může ovlivnit celkový výkon serveru. Pokud povolíte shromažďování rozšířených query_thread_profile
událostí tak, aby místo toho používala odlehčenou infrastrukturu profilace, bude to mít za následek mnohem menší režii na výkon, ale stále ovlivňuje celkový výkon serveru. Pokud povolíte rozšířenou query_plan_profile
událost, umožní to pouze odlehčenou infrastrukturu profilace pro dotaz, který se spustil s query_plan_profile
touto událostí, a proto nemá vliv na jiné úlohy na serveru. Tento tip použijte k profilování konkrétního dotazu, aniž by to ovlivnilo jiné části úlohy serveru. Další informace o zjednodušené profilaci naleznete v tématu Infrastruktura profilace dotazů.
Seznam všech podporovaných USE HINT
názvů se dá dotazovat pomocí zobrazení dynamické správy sys.dm_exec_valid_use_hints.
Důležité
Některé USE HINT
rady můžou kolidovat s příznaky trasování povolené na globální úrovni nebo na úrovni relace nebo s nastavením konfigurace v oboru databáze. V tomto případě má vždy přednost nápověda na úrovni dotazu (USE HINT
). Pokud dojde USE HINT
ke konfliktu s jiným tipem dotazu nebo příznakem trasování povoleném na úrovni dotazu (například podle QUERYTRACEON
), SQL Server při pokusu o spuštění dotazu vygeneruje chybu.
USE PLAN N'xml_plan'
Vynutí Optimalizátor dotazů použít existující plán dotazu pro dotaz určený xml_plan.
USE PLAN
nelze zadat pomocí INSERT
příkazu , , UPDATE
MERGE
nebo DELETE
příkazů.
Výsledný plán provádění vynucený touto funkcí je stejný nebo podobný plánu, který je vynucený. Vzhledem k tomu, že výsledný plán nemusí být identický s plánem určeným USE PLAN
, může se výkon plánů lišit. Ve výjimečných případech může být rozdíl mezi výkonem významný a negativní; v takovém případě musí správce odebrat vynucený plán.
TABLE HINT ( exposed_object_name [ , <table_hint> [ , ] ... n ] )
Použije zadanou tabulku nápovědu pro tabulku nebo zobrazení, které odpovídá exposed_object_name. Jako nápovědu k dotazu doporučujeme použít nápovědu tabulky pouze v kontextu průvodce plánem .
exposed_object_name může být jedním z následujících odkazů:
Pokud je alias použit pro tabulku nebo zobrazení v klauzuli FROM dotazu, exposed_object_name je alias.
Pokud se alias nepoužívá, exposed_object_name je přesná shoda tabulky nebo zobrazení odkazovaného v klauzuli
FROM
. Pokud je například na tabulku nebo zobrazení odkazováno pomocí názvu dvou částí, exposed_object_name je stejný dvoudílný název.
Když zadáte exposed_object_name bez zadání nápovědy k tabulce, budou všechny indexy zadané v dotazu jako součást nápovědy tabulky objektu ignorovány. Optimalizátor dotazů pak určuje využití indexu. Tuto techniku můžete použít k odstranění efektu nápovědy INDEX
tabulky, když nemůžete upravit původní dotaz. Viz příklad J.
<table_hint>
NOEXPAND [ , INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) ] | INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) | FORCESEEK [ ( index_value ( index_column_name [,... ] ) ] | FORCESCAN | HOLDLOCK | NOLOCK | NOWAIT | PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZOVATELNÉ | SNÍMEK | SPATIAL_WINDOW_MAX_CELLS = integer_value | TABLOCK | TABLOCKX | UPDLOCK | XLOCK
Nápověda tabulky, která se má použít pro tabulku nebo zobrazení, která odpovídá exposed_object_name jako nápovědu k dotazu. Popis těchto tipů najdete v nápovědě k tabulce.
Nápovědy tabulek jiné než INDEX
, FORCESCAN
a FORCESEEK
jsou zakázány jako nápovědy dotazu, pokud dotaz již obsahuje WITH
klauzuli určující nápovědu tabulky. Další informace najdete v části Poznámky.
Upozornění
Určení FORCESEEK
parametrů omezuje počet plánů, které může optimalizátor dotazů zvážit více než při zadávání FORCESEEK
bez parametrů. To může způsobit chybu "Plán nelze vygenerovat" v dalších případech.
FOR TIMESTAMP AS OF 'point_in_time'
Platí pro: Microsoft Fabric Data Warehouse
TIMESTAMP
Pomocí syntaxe v OPTION
klauzuli můžete dotazovat data, jak existovaly v minulosti, součást funkce časového cestování ve službě Synapse Data Warehouse v Microsoft Fabric.
Zadejte point_in_time ve formátu yyyy-MM-ddTHH:mm:ss[.fff]
pro vrácení dat, jak se v té době zobrazují. Časové pásmo je vždy ve standardu UTC.
CONVERT
Použijte syntaxi potřebného formátu data a času se stylem 126.
Nápovědu TIMESTAMP AS OF
OPTION
lze zadat pouze jednou pomocí klauzule. Další informace a omezení najdete v tématu Dotazování dat v minulosti.
FORCE [ SINGLE NODE | DISTRIBUOVANÝ ] PLÁN
Platí pro: Microsoft Fabric Data Warehouse
Umožňuje uživateli zvolit, jestli má být vynucený plán jednoho uzlu nebo distribuovaný plán pro provádění dotazu.
Poznámky
V příkazu nelze zadat INSERT
rady dotazů, s výjimkou případů, kdy SELECT
se uvnitř příkazu používá klauzule.
Nápovědy dotazů je možné zadat pouze v dotazu nejvyšší úrovně, ne v poddotazech. Pokud jako nápovědu dotazu zadáte nápovědu tabulky, můžete ji zadat v dotazu nejvyšší úrovně nebo v poddotazu. Hodnota zadaná pro exposed_object_name v TABLE HINT
klauzuli se však musí shodovat přesně s vystaveným názvem v dotazu nebo poddotazu.
Zadání nápovědy k tabulce jako nápovědy k dotazům
Jako nápovědu dotazu doporučujeme použít INDEX
nápovědu k dotazu , FORCESCAN
nebo FORCESEEK
tabulku pouze v kontextu průvodce plánem. Příručky plánu jsou užitečné, když nemůžete změnit původní dotaz, například proto, že se jedná o aplikaci třetí strany. Do dotazu se před kompilací a optimalizací přidá do dotazu tip dotazu zadaný v průvodci plánem. U ad hoc dotazů použijte TABLE HINT
klauzuli pouze v případě příkazů průvodce testovacím plánem. U všech ostatních ad hoc dotazů doporučujeme tyto rady zadat pouze jako nápovědu tabulky.
Pokud je zadána jako nápověda dotazu, INDEX
FORCESCAN
jsou nápovědy k tabulce a FORCESEEK
, platné pro následující objekty:
- Tabulky
- Pohledy
- Indexovaná zobrazení
- Běžné výrazy tabulky (nápovědu je nutné zadat v
SELECT
příkazu, jehož sada výsledků naplní společný výraz tabulky). - Dynamické pohledy správy (DMV)
- Pojmenované poddotazy
Jako nápovědu k dotazu, který neobsahuje žádné existující rady tabulky, můžete zadat INDEX
FORCESCAN
, a FORCESEEK
nápovědy k tabulce. Můžete je také použít k nahrazení existujícího INDEX
, FORCESCAN
nebo FORCESEEK
nápovědy v dotazu.
Nápovědy tabulek jiné než INDEX
, FORCESCAN
a FORCESEEK
jsou zakázány jako nápovědy dotazu, pokud dotaz již obsahuje WITH
klauzuli určující nápovědu tabulky. V tomto případě musí být jako nápověda dotazu zadána také odpovídající nápověda. Zadejte odpovídající nápovědu jako nápovědu dotazu pomocí TABLE HINT
klauzule OPTION
. Tato specifikace zachovává sémantiku dotazu. Pokud například dotaz obsahuje nápovědu NOLOCK
tabulky, OPTION
musí klauzule v parametru @hints průvodce plánem obsahovat také nápovědu NOLOCK
. Viz příklad K.
Zadání tipů pro úložiště dotazů
Pomocí funkce nápovědy k úložišti dotazů můžete vynutit rady pro dotazy identifikované prostřednictvím úložiště dotazů, aniž byste museli provádět změny kódu. Pomocí sys.sp_query_store_set_hints uložené procedury použijte nápovědu k dotazu. Viz příklad N.
Podpora nápovědy k dotazům v datovém skladu fabric
Microsoft Fabric Data Warehouse podporuje podmnožinu tipů pro dotazy:
HASH GROUP
ORDER GROUP
MERGE UNION
HASH UNION
CONCAT UNION
FORCE ORDER
USE HINT
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES
ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
Tyto rady dotazů jsou výhradní pro Datový sklad Microsoft Fabric:
-
FORCE SINGLE NODE PLAN
,FORCE DISTRIBUTED PLAN
Příklady
A. Použití funkce MERGE JOIN
Následující příklad určuje, že MERGE JOIN
spustí JOIN
operaci v dotazu. Příklad používá AdventureWorks2022
databázi.
SELECT *
FROM Sales.Customer AS c
INNER JOIN Sales.CustomerAddress AS ca ON c.CustomerID = ca.CustomerID
WHERE TerritoryID = 5
OPTION (MERGE JOIN);
GO
B. Použití FUNKCE OPTIMIZE FOR
Následující příklad dává optimalizátoru dotazů pokyn, aby při optimalizaci dotazu použil průměrnou 'Seattle'
@city_name
selektivitu predikátu pro všechny hodnoty @postal_code
sloupců. Příklad používá AdventureWorks2022
databázi.
CREATE PROCEDURE dbo.RetrievePersonAddress
@city_name NVARCHAR(30),
@postal_code NVARCHAR(15)
AS
SELECT * FROM Person.Address
WHERE City = @city_name AND PostalCode = @postal_code
OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) );
GO
C. Použití FUNKCE MAXRECURSION
MAXRECURSION
lze použít k tomu, aby se zabránilo špatně vytvořenému rekurzivnímu běžnému výrazu tabulky v zadávání do nekonečné smyčky. Následující příklad záměrně vytvoří nekonečnou smyčku a používá nápovědu MAXRECURSION
k omezení počtu úrovní rekurze na dvě. Příklad používá AdventureWorks2022
databázi.
--Creates an infinite loop
WITH cte (CustomerID, PersonID, StoreID) AS
(
SELECT CustomerID, PersonID, StoreID
FROM Sales.Customer
WHERE PersonID IS NOT NULL
UNION ALL
SELECT cte.CustomerID, cte.PersonID, cte.StoreID
FROM cte
JOIN Sales.Customer AS e
ON cte.PersonID = e.CustomerID
)
--Uses MAXRECURSION to limit the recursive levels to 2
SELECT CustomerID, PersonID, StoreID
FROM cte
OPTION (MAXRECURSION 2);
GO
Po opravě MAXRECURSION
chyby kódování se už nevyžaduje.
D. Použití FUNKCE MERGE UNION
Následující příklad používá nápovědu MERGE UNION
k dotazu. Příklad používá AdventureWorks2022
databázi.
SELECT *
FROM HumanResources.Employee AS e1
UNION
SELECT *
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
E. Použití HASH GROUP a FAST
Následující příklad používá nápovědu a FAST
nápovědu HASH GROUP
k dotazu. Příklad používá AdventureWorks2022
databázi.
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO
F. Použití MAXDOP
Následující příklad používá nápovědu MAXDOP
k dotazu. Příklad používá AdventureWorks2022
databázi.
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (MAXDOP 2);
GO
G. Použití indexu
Následující příklady používají nápovědu INDEX
. První příklad určuje jeden index. Druhý příklad určuje více indexů pro jeden odkaz na tabulku. V obou příkladech, protože použijete nápovědu INDEX
pro tabulku, která používá alias, TABLE HINT
musí klauzule také zadat stejný alias jako název vystaveného objektu. Příklad používá AdventureWorks2022
databázi.
EXEC sp_create_plan_guide
@name = N'Guide1',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 2;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT(e, INDEX (IX_Employee_ManagerID)))';
GO
EXEC sp_create_plan_guide
@name = N'Guide2',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 2;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT(e, INDEX(PK_Employee_EmployeeID, IX_Employee_ManagerID)))';
GO
H. Použití SILEEK
Následující příklad používá nápovědu k FORCESEEK
tabulce. Klauzule TABLE HINT
musí také zadat stejný dvoudílný název jako název vystaveného objektu. Zadejte název, když použijete nápovědu INDEX
pro tabulku, která používá název dvou částí. Příklad používá AdventureWorks2022
databázi.
EXEC sp_create_plan_guide
@name = N'Guide3',
@stmt = N'SELECT c.LastName, c.FirstName, HumanResources.Employee.Title
FROM HumanResources.Employee
JOIN Person.Contact AS c ON HumanResources.Employee.ContactID = c.ContactID
WHERE HumanResources.Employee.ManagerID = 3
ORDER BY c.LastName, c.FirstName;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT( HumanResources.Employee, FORCESEEK))';
GO
Já. Použití nápovědy pro více tabulek
Následující příklad použije nápovědu INDEX
pro jednu tabulku a nápovědu na jinou FORCESEEK
. Příklad používá AdventureWorks2022
databázi.
EXEC sp_create_plan_guide
@name = N'Guide4',
@stmt = N'SELECT e.ManagerID, c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 3;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT (e, INDEX( IX_Employee_ManagerID))
, TABLE HINT (c, FORCESEEK))';
GO
J. Přepsání existující nápovědy k tabulce pomocí funkce TABLE HINT
Následující příklad ukazuje, jak použít nápovědu TABLE HINT
. Nápovědu můžete použít bez zadání nápovědy k přepsání INDEX
chování nápovědy tabulky, které zadáte v FROM
klauzuli dotazu. Příklad používá AdventureWorks2022
databázi.
EXEC sp_create_plan_guide
@name = N'Guide5',
@stmt = N'SELECT e.ManagerID, c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e WITH (INDEX (IX_Employee_ManagerID))
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 3;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT(e))';
GO
K. Určení sémantiky ovlivňující rady tabulky
Následující příklad obsahuje v dotazu dvě rady tabulky: NOLOCK
, což je sémantický vliv, a INDEX
, který není sémantický-ovlivňující. Chcete-li zachovat sémantiku dotazu, NOLOCK
je tip zadán v OPTIONS
klauzuli průvodce plánem. Spolu s nápovědou NOLOCK
určete INDEX
a FORCESEEK
rady a nahraďte nápovědu, která není sémantický vliv INDEX
na nápovědu v dotazu během kompilace a optimalizace příkazu. Příklad používá AdventureWorks2022
databázi.
EXEC sp_create_plan_guide
@name = N'Guide6',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
WITH (NOLOCK, INDEX (PK_Employee_EmployeeID))
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 3;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT (e, INDEX(IX_Employee_ManagerID), NOLOCK, FORCESEEK))';
GO
Následující příklad ukazuje alternativní metodu zachování sémantiky dotazu a povolení optimalizátoru zvolit jiný index než index zadaný v nápovědě tabulky. Umožňuje optimalizátoru zvolit zadáním nápovědy NOLOCK
OPTIONS
v klauzuli. Tuto nápovědu zadáte, protože je to sémantické ovlivnění. Potom zadejte TABLE HINT
klíčové slovo pouze s odkazem na tabulku a bez INDEX
nápovědy. Příklad používá AdventureWorks2022
databázi.
EXEC sp_create_plan_guide
@name = N'Guide7',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
WITH (NOLOCK, INDEX (PK_Employee_EmployeeID))
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 2;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT (e, NOLOCK))';
GO
L. Použití NÁPOVĚDY K POUŽITÍ
Následující příklad používá nápovědu a USE HINT
nápovědu RECOMPILE
k dotazu. Příklad používá AdventureWorks2022
databázi.
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (RECOMPILE, USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES', 'DISABLE_PARAMETER_SNIFFING'));
GO
M. Použití FUNKCE QUERYTRACEON HINT
Následující příklad používá nápovědu QUERYTRACEON
k dotazu. Příklad používá AdventureWorks2022
databázi. Můžete povolit všechny opravy hotfix ovlivňující plán řízené příznakem trasování 4199 pro konkrétní dotaz pomocí následujícího dotazu:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199);
Můžete také použít více příznaků trasování jako v následujícím dotazu:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137);
N. Použití nápovědy k úložišti dotazů
Funkce nápovědy k úložišti dotazů poskytuje snadno použitelnou metodu pro tvarování plánů dotazů beze změny kódu aplikace.
Nejprve identifikujte dotaz, který už byl spuštěn v zobrazeních katalogu úložiště dotazů, například:
SELECT q.query_id, qt.query_sql_text
FROM sys.query_store_query_text qt
INNER JOIN sys.query_store_query q ON
qt.query_text_id = q.query_text_id
WHERE query_sql_text like N'%ORDER BY ListingPrice DESC%'
AND query_sql_text not like N'%query_store%';
GO
Následující příklad použije nápovědu k vynucení starší verze estimátoru kardinality na query_id 39 identifikovaný v úložišti dotazů:
EXEC sys.sp_query_store_set_hints @query_id = 39, @query_hints = N'OPTION (USE HINT (''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Následující příklad použije nápovědu k vynucení maximální velikosti přidělení paměti v PERCENT
nakonfigurované paměti limitu na query_id
39 identifikovaných v úložišti dotazů:
EXEC sys.sp_query_store_set_hints @query_id = 39, @query_hints = N'OPTION (MAX_GRANT_PERCENT = 10)';
Následující příklad používá více tipů dotazu na query_id 39, včetně RECOMPILE
, MAXDOP 1
a sql Server 2012 (11.x) chování optimalizátoru dotazů:
EXEC sys.sp_query_store_set_hints @query_id = 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT (''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Následující příklad blokuje dotaz s query_id 39 z budoucího spuštění použitím nápovědy ABORT_QUERY_EXECUTION
. Nápověda je ve verzi Preview.
EXEC sys.sp_query_store_set_hints @query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
O. Dotazování dat k určitému bodu v čase
Platí pro: Warehouse v Microsoft Fabric
TIMESTAMP
Pomocí syntaxe v OPTION
klauzuli se můžete dotazovat na data, která existovala v minulosti, ve službě Synapse Data Warehouse v Microsoft Fabric. Následující ukázkový dotaz vrátí data, která se zobrazila 13. března 2024 v 7:39:35.28 UTC. Časové pásmo je vždy ve standardu UTC.
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28');--March 13, 2024 at 7:39:35.28 PM UTC