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
Spravovaná instance
Azure SQLKoncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze 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 UNION pouze poslední dotaz zahrnující OPTION 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.
Caution
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:
Syntax
<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
}
Arguments
{ HASH | SKUPINA ŘÁDU }
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 | SLOUČENÍ | HASH } JOIN
Určuje, že všechny operace spojení provádí LOOP JOIN, MERGE JOINnebo 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.
Note
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ě NOEXPANDk 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, MERGEa DELETE příkazů.
RYCHLÝ 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.
Note
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í.
{ SÍLA | 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.
{ SÍLA | 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.
DRŽTE PLÁN
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ů:
UPDATEDELETEMERGEINSERT
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 naleznete v tématu Konfigurace serveru: maximální stupeň paralelismu.
Warning
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á tempdba 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 FORk dotazu.UNKNOWNUrč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 FORk 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.
Important
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 naleznete v tématu Nastavení příznaků trasování pomocí DBCC TRACEON.
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í.
RECOMPILE
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í RECOMPILEuklá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 PLANoptimalizá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í.
POUŽIJTE NÁPOVĚDU ( '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.
Tip
Názvy nápovědy nerozlišují malá a velká písmena.
Podporují se následující názvy nápovědy:
| Hint | Description |
|---|---|
'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 ovlivňující úlohy aplikací. Další informace najdete v tématu Blokování budoucího provádění problematických dotazů. Platí na: Azure SQL Database, Azure SQL Managed InstanceAUTD a SQL Server 2025 (17.x). |
'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í na: SQL Server 2025 (17.x) 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í na: SQL Server 2025 (17.x) 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 je ekvivalentem 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 při použití příznaku trasování 9471 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_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 odpovídá 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- EXISTSTento 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í konfigurace s příznakem trasování 4136 nebo PARAMETER_SNIFFING = OFF |
'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 Innerování skalárních uživatelsky definovaných funkcí. 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_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í konfigurace s příznakem trasování 4199 nebo s QUERY_OPTIMIZER_HOTFIXES = ON . |
'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 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 odpovídá nastavení konfigurace s příznakem trasování 9481 nebo sLEGACY_CARDINALITY_ESTIMATION = ONoborem databáze . |
'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 |
'DISABLE_RESULT_SET_CACHE' |
Zakáže ukládání sady výsledků do mezipaměti (Preview) pro konkrétní spuštění dotazu, pokud je pro aktuálně připojenou položku povolená mezipaměť sady výsledků. To znamená, že nevygeneruje novou mezipaměť sady výsledků ani nepoužije existující mezipaměť sady výsledků (pokud existuje). To může být užitečné při ladění nebo scénářích testování A/B. Další informace naleznete v tématu Ukládání sady výsledků do mezipaměti. Platí pro: Microsoft Fabric |
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.
Important
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.
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, FORCESCANa 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.
Caution
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.
PRO ČASOVÉ RAZÍTKO K 'point_in_time'
Platí pro: Warehouse v Microsoft Fabric
TIMESTAMP Pomocí syntaxe v OPTION klauzuli můžete dotazovat data, jak existovala v minulosti, součást funkce časového cestování v Microsoft Fabric Data Warehouse.
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 OFOPTION lze zadat pouze jednou pomocí klauzule. Další informace a omezení najdete v tématu Dotazování dat v minulosti.
Dočasné tabulky s oborem relace (#temp_table) nejsou ovlivněny FOR TIMESTAMP AS OF.
FORCE [ SINGLE NODE | DISTRIBUOVANÝ ] PLÁN
Platí pro: Warehouse v Microsoft Fabric
Umožňuje uživateli zvolit, jestli má být vynucený plán jednoho uzlu nebo distribuovaný plán pro provádění dotazu.
Remarks
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 INDEXnápovědu k dotazu , FORCESCANnebo 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, INDEXFORCESCANjsou nápovědy k tabulce a FORCESEEK , platné pro následující objekty:
- Tables
- Views
- Indexovaná zobrazení
- Běžné výrazy tabulky (nápovědu je nutné zadat v
SELECTpří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 INDEXFORCESCAN, a FORCESEEK nápovědy k tabulce. Můžete je také použít k nahrazení existujícího INDEX, FORCESCANnebo FORCESEEK nápovědy v dotazu.
Nápovědy tabulek jiné než INDEX, FORCESCANa 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 NOLOCKtabulky, 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
Datové sklady v Microsoft Fabric podporují podmnožinu tipů pro dotazy:
HASH GROUPORDER GROUPMERGE UNIONHASH UNIONCONCAT UNIONFORCE ORDERUSE HINTASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATESASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATESASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATESASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
Tyto rady dotazů jsou výhradní pro Datový sklad Microsoft Fabric:
-
FORCE SINGLE NODE PLAN, ,FORCE DISTRIBUTED PLANDISABLE_RESULT_SET_CACHE
Examples
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á AdventureWorks2025 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á AdventureWorks2025 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á AdventureWorks2025 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á AdventureWorks2025 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 HASH GROUP nápovědu FAST k dotazu. Příklad používá AdventureWorks2025 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á AdventureWorks2025 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á AdventureWorks2025 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á AdventureWorks2025 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
I. 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á AdventureWorks2025 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á AdventureWorks2025 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á AdventureWorks2025 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 NOLOCKOPTIONS 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á AdventureWorks2025 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 RECOMPILE nápovědu USE HINT k dotazu. Příklad používá AdventureWorks2025 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á AdventureWorks2025 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ů:
EXECUTE 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ů:
EXECUTE 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 1a sql Server 2012 (11.x) chování optimalizátoru dotazů:
EXECUTE 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.
EXECUTE 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 můžete dotazovat data, která existovala v minulosti v datovém skladu 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
P. Dotaz vynucuje jeden uzel nebo distribuovaný dotaz.
Platí pro: Warehouse v Microsoft Fabric
Pokud chcete vynutit, aby dotaz v datovém skladu prostředků infrastruktury používal jeden uzel, použijte force [ SINGLE NODE | DISTRIBUTED ] PLAN hint.
SELECT OrderDateKey, SalesAmount
FROM FactInternetSales
OPTION (FORCE SINGLE NODE PLAN);
Vynucení dotazu v datovém skladu fabric k použití distribuovaného dotazu:
SELECT OrderDateKey, SalesAmount
FROM FactInternetSales
OPTION (FORCE DISTRIBUTED PLAN);
Q. Zakázání vytvoření nebo použití mezipaměti sady výsledků dotazu (Preview)
Platí pro: Microsoft Fabric
Slouží 'DISABLE_RESULT_SET_CACHE' jako hint_name blokování mezipaměti sady výsledků pro konkrétní spuštění dotazu. Další informace naleznete v tématu Ukládání sady výsledků do mezipaměti.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (USE HINT('DISABLE_RESULT_SET_CACHE'));