Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A lekérdezési tippek azt határozzák meg, hogy a megadott tippeket a rendszer a lekérdezés hatókörében használja. Ezek az utasítás összes operátorára hatással vannak. Ha UNION szerepel a fő lekérdezésben, csak az utolsó, UNION műveletet tartalmazó lekérdezés rendelkezhet a OPTION záradékkal. A lekérdezési tippek a OPTION záradékrészeként vannak megadva. A 8622-s hiba akkor fordul elő, ha egy vagy több lekérdezési tipp miatt a Lekérdezésoptimalizáló nem hoz létre érvényes tervet.
Caution
Mivel az SQL Server Lekérdezésoptimalizáló általában a legjobb végrehajtási tervet választja ki egy lekérdezéshez, javasoljuk, hogy csak tippeket használjon a tapasztalt fejlesztők és adatbázis-rendszergazdák számára.
A következőkre vonatkozik:
Transact-SQL szintaxis konvenciók
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 | REND } CSOPORT
Megadja, hogy a lekérdezés GROUP BY vagy DISTINCT záradékában leírt összesítéseknek kivonatolást vagy rendezést kell használniuk.
- A kivonatalapú algoritmusok általában javíthatják a nagy vagy összetett csoportosítási csoportokat tartalmazó lekérdezések teljesítményét.
- A rendezési algoritmus általában javíthatja a kis vagy egyszerű csoportosítási csoportokat tartalmazó lekérdezések teljesítményét.
{ MERGE | KIVONAT | CONCAT } UNION
Azt adja meg, hogy az összes UNION műveletet egyesítő, kivonatoló vagy összefűző UNION halmazok futtatják. Ha több UNION tipp van megadva, a Lekérdezésoptimalizáló kiválasztja a legkevésbé költséges stratégiát a megadott tippek közül.
- Az egyesítésalapú algoritmusművelet általában javíthatja a rendezett bemeneteket tartalmazó lekérdezések teljesítményét.
- A kivonatalapú algoritmusok általában javíthatják a nem válogatott vagy nagy bemeneteket tartalmazó lekérdezések teljesítményét.
- Az összefűzésen alapuló algoritmus általában javíthatja a különböző vagy kis bemeneteket tartalmazó lekérdezések teljesítményét.
{ HUROK | ÖSSZEOLVADÁS | HASH } CSATLAKOZZ
Megadja, hogy az összes illesztési műveletet LOOP JOIN, MERGE JOINvagy HASH JOIN hajtja végre a teljes lekérdezésben. Ha egynél több illesztés tippet ad meg, az optimalizáló kiválasztja a legkevésbé költséges illesztés stratégiát az engedélyezettek közül.
Ha ugyanannak a lekérdezésnek egy adott táblapár FROM záradékában megad egy illesztési tippet, ez az illesztési tipp elsőbbséget élvez a két tábla összekapcsolásakor. A lekérdezési tippeket azonban továbbra is tiszteletben kell tartani. A táblapár illesztési tippje csak az engedélyezett illesztési módszerek kiválasztását korlátozhatja a lekérdezési tippben. További információ: Csatlakozás tippek.
DISABLE_OPTIMIZED_PLAN_FORCING
A következőkre vonatkozik: SQL Server (SQL Server 2022-től kezdve (16.x))
Letiltja optimalizált terv lekérdezéshez való kényszerítését.
Az optimalizált terv kényszerítése csökkenti az ismétlődő kényszerített lekérdezések fordítási többletterhelését. A lekérdezés-végrehajtási terv létrehozása után a rendszer az egyes fordítási lépéseket optimalizálási újrajátszási szkriptként tárolja újra. Az optimalizálási visszajátszási szkriptek a tömörített showplan XML részeként vannak tárolva Lekérdezéstár, rejtett OptimizationReplay attribútumban.
NÉZETEK KIBONTÁSA
Az indexelt nézetek kibontása. Azt is megadja, hogy a Lekérdezésoptimalizáló nem tekinti az indexelt nézetet a lekérdezési rész helyettesítésének. A nézet akkor lesz kibontva, ha a nézetdefiníció lecseréli a nézet nevét a lekérdezés szövegében.
Ez a lekérdezési tipp gyakorlatilag letiltja az indexelt nézetek és indexek közvetlen használatát a lekérdezésterv indexelt nézeteihez.
Note
Az indexelt nézet kondenzálva marad, ha a lekérdezés SELECT részében közvetlen hivatkozás található a nézetre. A nézet WITH (NOEXPAND) vagy WITH (NOEXPAND, INDEX( <index_value> [ , *...n* ] ) )megadása esetén is sűrített marad. További információ a lekérdezési tippről NOEXPAND: A NOEXPANDhasználata.
A tipp csak az utasítások SELECT részében szereplő nézeteket érinti, beleértve a INSERT, UPDATE, MERGEés DELETE utasítások nézeteit is.
GYORS integer_value
Megadja, hogy a lekérdezés az első integer_value sorok számának gyors lekérésére van optimalizálva. Ez az eredmény nem negatív egész szám. Az első integer_value sor visszaadása után a lekérdezés folytatja a végrehajtást, és létrehozza annak teljes eredménykészletét.
KÉNYSZERÍTÉS
Megadja, hogy a lekérdezési szintaxis által jelzett illesztés sorrendje megmaradjon a lekérdezésoptimalizálás során. A FORCE ORDER használata nem befolyásolja a lekérdezésoptimalizáló lehetséges szerepkör-visszaverési viselkedését.
FORCE ORDER megőrzi a lekérdezésben megadott illesztési sorrendet, ami javíthatja az összetett illesztési feltételeket vagy tippeket tartalmazó lekérdezések teljesítményét vagy konzisztenciáját.
Note
Egy MERGE utasításban a forrástábla a céltábla előtt érhető el alapértelmezett illesztési sorrendként, kivéve, ha a WHEN SOURCE NOT MATCHED záradék meg van adva. A FORCE ORDER megadása megőrzi ezt az alapértelmezett viselkedést.
{ FORCE | DISABLE } EXTERNALPUSHDOWN
Kényszerítse vagy tiltsa le a minősített kifejezések számításának leküldését a Hadoopban. Csak a PolyBase-t használó lekérdezésekre vonatkozik. Nem küld le az Azure Storage-ba.
{ FORCE | KIKAPCSOLD } SCALEOUTEXECUTION
A külső táblákat SQL Server 2019 Big Data-fürtökhasználó PolyBase-lekérdezések vertikális felskálázásának kényszerítése vagy letiltása. Ezt a tippet csak egy SQL Big Data-fürt főpéldányát használó lekérdezés tartja tiszteletben. A vertikális felskálázás a big data-fürt számítási készletében történik.
TERV MEGTARTVA
Módosítja az ideiglenes táblák újrafordítási küszöbértékeket, és azonosvá teszi őket az állandó táblák küszöbértékével. A becsült újrafordítási küszöbérték automatikus újrafordítást indít el a lekérdezéshez, amikor az indexelt oszlop becsült száma megváltozik egy táblában az alábbi utasítások egyikének futtatásával:
UPDATEDELETEMERGEINSERT
A KEEP PLAN megadásával biztosítható, hogy a lekérdezések ne legyenek olyan gyakran újra lefordítva, amikor egy tábla több frissítése is van.
FIX TERV
Kényszeríti a Lekérdezésoptimalizálót, hogy a statisztikák változásai miatt ne kelljen újrafordítania a lekérdezéseket. A KEEPFIXED PLAN megadásával biztosítható, hogy a lekérdezések csak akkor legyenek újrafordítva, ha az alapul szolgáló táblák sémája megváltozik, vagy ha sp_recompile fut ezen táblákon.
IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
A következővonatkozik: SQL Server (az SQL Server 2012-től kezdve (11.x)).
Megakadályozza, hogy a lekérdezés nemclustered memóriaoptimalizált oszlopcentrikus indexet használjon. Ha a lekérdezés tartalmazza a lekérdezési tippet, hogy elkerülje az oszlopcentrikus index használatát, és egy indexmutatót használjon oszlopcentrikus indexhez, a tippek ütköznek, és a lekérdezés hibát ad vissza.
MAX_GRANT_PERCENT = <numeric_value>
A következővonatkozik: SQL Server (az SQL Server 2012 (11.x) Service Pack 3-tól, az SQL Server 2014-től (12.x) Service Pack 2-től és az Azure SQL Database-től kezdve.
A maximális memóriakiadási méret a konfigurált memóriakorlát PERCENT. A lekérdezés garantáltan nem lépi túl ezt a korlátot, ha a lekérdezés felhasználó által definiált erőforráskészletben fut. Ebben az esetben, ha a lekérdezés nem rendelkezik a minimálisan szükséges memóriával, a rendszer hibát jelez. Ha egy lekérdezés a rendszerkészletben fut (alapértelmezett), akkor legalább a futtatáshoz szükséges memóriát kapja. A tényleges korlát alacsonyabb lehet, ha az Erőforrás-vezérlő beállítása alacsonyabb, mint az ebben a tippben megadott érték. Az érvényes értékek 0,0 és 100,0 között vannak.
A memóriakiadási tipp nem érhető el az indexek létrehozásához vagy az index újraépítéséhez.
MIN_GRANT_PERCENT = <numeric_value>
A következővonatkozik: SQL Server (az SQL Server 2012 (11.x) Service Pack 3-tól, az SQL Server 2014-től (12.x) Service Pack 2-től és az Azure SQL Database-től kezdve.
A minimális memóriakiadási méret a konfigurált memóriakorlát PERCENT. A lekérdezés garantáltan lekéri a MAX(required memory, min grant), mert legalább szükséges memória szükséges a lekérdezés indításához. Az érvényes értékek 0,0 és 100,0 között vannak.
A min_grant_percent memóriahasználati beállítás a mérettől függetlenül felülbírálja a sp_configure beállítást (lekérdezésenként minimális memória (KB). A memóriakiadási tipp nem érhető el az indexek létrehozásához vagy az index újraépítéséhez.
MAXDOP <integer_value>
A következővonatkozik: SQL Server (sql Server 2008 (10.0.x)) és Azure SQL Database.
Felülbírálja a maximális párhuzamossági fokotsp_configurekonfigurációs beállítását. Felülbírálja az erőforrás-kormányzót is a beállítást megadva lekérdezéshez. A MAXDOP lekérdezési tipp túllépheti a sp_configureáltal konfigurált értéket. Ha MAXDOP túllépi az Erőforrás-kormányzóval konfigurált értéket, az adatbázismotor a Resource Governor MAXDOP értéket használja, amelyet az ALTER SZÁMÍTÁSI FELADATCSOPORTcímű cikkben ismertetünk. A lekérdezési tipp használatakor a MAXDOP konfigurációs beállításhoz használt összes szemantikai szabály alkalmazható. További információ: kiszolgálókonfiguráció: a párhuzamosság maximális foka.
Warning
Ha MAXDOP nullára van állítva, akkor a kiszolgáló a párhuzamosság maximális fokát választja ki.
MAXREKURSZIÓ <integer_value>
A lekérdezéshez engedélyezett rekurziók maximális számát adja meg. szám 0 és 32 767 közötti pozitív egész szám. Ha 0 van megadva, a rendszer nem alkalmaz korlátot. Ha ez a beállítás nincs megadva, a kiszolgáló alapértelmezett korlátja 100.
Ha a lekérdezés végrehajtása során eléri MAXRECURSION korlát megadott vagy alapértelmezett számát, a lekérdezés véget ér, és egy hiba jelenik meg.
A hiba miatt az utasítás minden hatása vissza lesz állítva. Ha az utasítás egy SELECT utasítás, részleges vagy nem lesz eredmény. Előfordulhat, hogy a visszaadott részleges eredmények nem tartalmazzák a rekurziós szintek összes sorát a megadott maximális rekurziós szintnél.
További információ: WITH common_table_expression.
NO_PERFORMANCE_SPOOL
A következővonatkozik: SQL Server (sql Server 2016 (13.x)) és Azure SQL Database.
Megakadályozza, hogy a várólistás operátor hozzá legyen adva a lekérdezési tervekhez (kivéve azokat a csomagokat, amelyek esetében a frissítési szemantika érvényes biztosítása érdekében sorra van szükség). A spool operátor bizonyos esetekben csökkentheti a teljesítményt. A dobókészlet például tempdbhasznál, és tempdb versengés akkor fordulhat elő, ha sok egyidejű lekérdezés fut a várólistán.
OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ... n ] )
Arra utasítja a Lekérdezésoptimalizálót, hogy a lekérdezés lefordításakor és optimalizálásakor használjon egy adott értéket egy helyi változóhoz. Az érték csak a lekérdezés optimalizálása során használatos, a lekérdezés végrehajtásakor nem.
@variable_name
A lekérdezésben használt helyi változó neve, amelyhez egy érték rendelhető hozzá a
OPTIMIZE FORlekérdezési tipptel való használatra.UNKNOWNMegadja, hogy a Lekérdezésoptimalizáló a kezdeti érték helyett statisztikai adatokat használ egy helyi változó értékének meghatározásához a lekérdezésoptimalizálás során.
literal_constant
A lekérdezési tipptel való használatra
OPTIMIZE FORhozzárendelendő konstansérték. literal_constant csak a lekérdezésoptimalizálás során használják, és nem a @variable_name értékeként a lekérdezés végrehajtása során. literal_constant bármilyen SQL Server rendszeradattípusból állhat, amely konstansként fejezhető ki. A literal_constant adattípusának implicit módon konvertálhatónak kell lennie arra az adattípusra, amely @variable_name hivatkozik a lekérdezésben.
Az OPTIMIZE FOR képes ellensúlyozni az optimalizáló alapértelmezett paraméterészlelési viselkedését. A OPTIMIZE FOR is használhatja a terv útmutatóinak létrehozásakor. További információ: Tárolt eljárás újrafordítása.
OPTIMALIZÁLÁS ISMERETLENRE
Arra utasítja a Lekérdezésoptimalizálót, hogy a lekérdezés fordítása és optimalizálása során a futtatókörnyezet paraméterértékének használata helyett használja a predikátum átlagos választóképességét az összes oszlopértékre.
Ha ugyanabban a lekérdezési tippben OPTIMIZE FOR @variable_name = <literal_constant> és OPTIMIZE FOR UNKNOWN használ, a Lekérdezésoptimalizáló egy adott értékhez megadott literal_constant használja. A Lekérdezésoptimalizáló az ISMERETLEN függvényt használja a változó többi értékéhez. Az értékek csak a lekérdezésoptimalizálás során használatosak, a lekérdezés végrehajtásakor nem.
PARAMÉTEREZÉS { SIMPLE | KÉNYSZERÍTETT }
Megadja azOKAT a paraméterezési szabályokat, amelyekre az SQL Server Lekérdezésoptimalizáló a lekérdezés fordításakor vonatkozik.
Important
A PARAMETERIZATION lekérdezési tipp csak a terv útmutatójában adható meg az PARAMETERIZATION adatbázis-SET beállítás aktuális beállításának felülbírálásához. Nem adható meg közvetlenül egy lekérdezésen belül.
További információ: Lekérdezésparaméterezési viselkedés megadása terv-útmutatók használatával.
SIMPLE arra utasítja a Lekérdezésoptimalizálót, hogy kísérelje meg az egyszerű paraméterezést.
FORCED arra utasítja a Lekérdezésoptimalizálót, hogy kísérelje meg a kényszerített paraméterezést. További információ: Kényszerített paraméterezés a lekérdezésfeldolgozási architektúra útmutatójában, és Egyszerű paraméterezés a lekérdezésfeldolgozási architektúra útmutatójában.
QUERYTRACEON <integer_value>
Ez a beállítás lehetővé teszi, hogy csak egy lekérdezéses fordítás során engedélyezze a terveket befolyásoló nyomkövetési jelzőt. A többi lekérdezésszintű beállításhoz hasonlóan a terv-segédvonalakkal együtt is használhatja, hogy megfeleljenek a bármely munkamenetből végrehajtott lekérdezés szövegének, és automatikusan alkalmazza a tervre hatással lévő nyomkövetési jelzőt a lekérdezés lefordításakor. A QUERYTRACEON beállítás csak a Lekérdezésoptimalizáló nyomkövetési jelzői esetében támogatott. További információ: Nyomkövetési jelzők beállítása a DBCC TRACEON használatával.
A beállítás használata nem ad vissza semmilyen hibát vagy figyelmeztetést, ha nem támogatott nyomkövetési jelzőszámot használ. Ha a megadott nyomkövetési jelző nem befolyásolja a lekérdezések végrehajtási tervét, a rendszer csendben figyelmen kívül hagyja a beállítást.
Ha egy lekérdezésben egynél több nyomkövetési jelzőt szeretne használni, adjon meg egy QUERYTRACEON tippet minden egyes nyomkövetési jelzőszámhoz.
RECOMPILE
Utasítja az SQL Server adatbázismotort, hogy hozzon létre egy új, ideiglenes tervet a lekérdezéshez, és azonnal elveti a tervet a lekérdezés végrehajtása után. A létrehozott lekérdezési terv nem helyettesíti a gyorsítótárban tárolt tervet, ha ugyanaz a lekérdezés fut a RECOMPILE tipp nélkül. A RECOMPILEmegadása nélkül az adatbázismotor gyorsítótárazza a lekérdezési terveket, és újra felhasználja őket. A lekérdezési tervek fordításakor a RECOMPILE lekérdezési tipp a lekérdezésben szereplő helyi változók aktuális értékeit használja. Ha a lekérdezés tárolt eljáráson belül van, az aktuális értékek bármely paraméternek átadva lesznek.
RECOMPILE egy tárolt eljárás létrehozásának hasznos alternatíva.
RECOMPILE akkor használja a WITH RECOMPILE záradékot, ha a teljes tárolt eljárás helyett csak a tárolt eljáráson belüli lekérdezések egy részhalmazát kell újrafordíteni. További információ: Tárolt eljárás újrafordítása.
RECOMPILE a terv útmutatóinak létrehozásakor is hasznos.
ROBUSZTUS TERV
Kényszeríti a Lekérdezésoptimalizálót, hogy próbáljon ki egy tervet, amely a maximális lehetséges sorméretre működik, esetleg a teljesítmény rovására. A lekérdezés feldolgozásakor előfordulhat, hogy a köztes tábláknak és operátoroknak olyan sorokat kell tárolniuk és feldolgozniuk, amelyek szélesebbek, mint bármelyik bemeneti sor a lekérdezés feldolgozásakor. A sorok olyan szélesek lehetnek, hogy néha az adott operátor nem tudja feldolgozni a sort. Ha a sorok ilyen szélesek, az adatbázismotor hibát okoz a lekérdezés végrehajtása során. A ROBUST PLANhasználatával arra utasítja a Lekérdezésoptimalizálót, hogy ne vegye figyelembe azokat a lekérdezési terveket, amelyek a problémába ütközhetnek.
Ha egy ilyen terv nem lehetséges, a Lekérdezésoptimalizáló hibát ad vissza ahelyett, hogy a hibaészlelést elhalasztja a lekérdezés végrehajtására. A sorok változó hosszúságú oszlopokat tartalmazhatnak; az adatbázismotor lehetővé teszi olyan sorok definiálását, amelyek maximális lehetséges mérete meghaladja az adatbázismotor feldolgozásának képességét. Általában a maximális lehetséges méret ellenére az alkalmazások olyan sorokat tárolnak, amelyek tényleges méretei az adatbázismotor által feldolgozható korlátokon belül vannak. Ha az adatbázismotor túl hosszú sorba kerül, a rendszer végrehajtási hibát ad vissza.
HASZNÁLD TIPPET ( 'hint_name' )
A következőkre vonatkozik: SQL Server (az SQL Server 2016 (13.x) SP1-től kezdve), az Azure SQL Database-től és a felügyelt Azure SQL-példánytól kezdve.
Egy vagy több további tippet biztosít a lekérdezésfeldolgozónak. A további tippeket a rendszer egyetlen idézőjelen belül adja meg a tipp nevével.
Tip
A tippnevek nem érzékenyek a kis- és nagybetűkre.
A következő tippnevek támogatottak:
| Hint | Description |
|---|---|
'ABORT_QUERY_EXECUTION'
|
Letiltja a lekérdezések végrehajtását.
Lekérdezéstár-tippként szolgál arra, hogy a rendszergazdák blokkolják az ismert problémás lekérdezések későbbi végrehajtását, például az alkalmazás számítási feladatait érintő nem alapvető lekérdezéseket. További információ: A problémás lekérdezések jövőbeli végrehajtásának letiltása. Alkalmazható: Azure SQL Database, Azure SQL Managed InstanceAUTD és SQL Server 2025 (17.x). |
'ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP' |
Az REGEXP_LIKEszámosságbecslési modellje alapértelmezett szelektivitási értékeket biztosít. Használja ezt a tippet, ha az alapértelmezett becslés túl magas. Rögzített alacsonyabb szelektivitási értékre állítja a szelektivitást. Vonatkozik a következőkre: SQL Server 2025 (17.x) és újabb verziók, valamint Azure SQL Database |
'ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP' |
Az REGEXP_LIKEszámosságbecslési modellje alapértelmezett szelektivitási értékeket biztosít. Használja ezt a tippet, ha az alapértelmezett becslés túl alacsony. Rögzített magasabb szelektivitási értékre állítja a szelektivitást. Vonatkozik a következőkre: SQL Server 2025 (17.x) és újabb verziók, valamint Azure SQL Database |
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
|
Lekérdezéstervet hoz létre az egyszerű elszigetelési feltételezéssel az illesztések alapértelmezett alapszintű elszigetelési feltételezése helyett az SQL Server 2014 (12.x) és újabb verzióinak lekérdezésoptimalizáló számosságbecslési modelljében. Ez a tippnév egyenértékű a 9476-os nyomkövetési jelzővel . |
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
|
Létrehoz egy tervet, amely minimális szelektivitást használ a szűrők és predikátumok becslésekor a teljes korreláció figyelembe vételével. Ez a tippnév egyenértékű a 4137-zel , ha az SQL Server 2012 (11.x) és korábbi verzióinak számosságbecslési modelljével használják, és hasonló hatással van a 9471 nyomkövetési jelzőre az SQL Server 2014 (12.x) és újabb verziók számosságbecslési modelljével. |
'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES' |
Olyan tervet hoz létre, amely maximális szelektivitást használ a szűrők és predikátumok becslésekor a teljes függetlenség figyelembe vételével. Ez a tippnév az SQL Server 2012 (11.x) és a korábbi verziók számosságbecslési modelljének alapértelmezett viselkedése, amely egyenértékű a 9472-vel , ha az SQL Server 2014 (12.x) és újabb verzióinak számosságbecslési modelljével használják. A következővonatkozik: Azure SQL Database |
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' |
Létrehoz egy tervet, amely a legkevésbé szelektivitást használja a szűrők és predikátumok becslésekor, hogy figyelembe vegyék a részleges korrelációt. Ez a tippnév az SQL Server 2014 (12.x) és újabb verziók számosságbecslési modelljének alapértelmezett viselkedése. A következővonatkozik: Azure SQL Database |
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' |
Letiltja a kötegelt módú adaptív illesztéseket. További információ: Batch módú adaptív illesztések. Az: SQL Server 2017 (14.x) és újabb verziók, valamint az Azure SQL Database |
'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK' |
Letiltja a kötegelt módú memóriahasználati visszajelzést. További információ: Batch módú memóriavisszajelzési. Az: SQL Server 2017 (14.x) és újabb verziók, valamint az Azure SQL Database |
'DISABLE_DEFERRED_COMPILATION_TV' |
Letiltja a táblaváltozó késleltetett fordítását. További információ: táblaváltozó késleltetett fordítási. A következővonatkozik: SQL Server 2019 (15.x) és újabb verziók, valamint az Azure SQL Database |
'DISABLE_INTERLEAVED_EXECUTION_TVF' |
Letiltja az interleaved végrehajtást többutas táblaértékű függvények esetében. További információ: Többutas táblaértékelt függvényekinterleaved végrehajtása. Az: SQL Server 2017 (14.x) és újabb verziók, valamint az Azure SQL Database |
'DISABLE_OPTIMIZED_NESTED_LOOP' |
Arra utasítja a lekérdezésfeldolgozót, hogy ne használjon rendezési műveletet (kötegelt rendezést) az optimalizált beágyazott hurkos illesztésekhez a lekérdezésterv létrehozásakor. Ez a tippnév egyenértékű a 2340-hez hasonló nyomkövetési jelzővel . Ez a tipp explicit rendezésekre és kötegelt rendezésekre is vonatkozik. |
'DISABLE_OPTIMIZER_ROWGOAL'
|
Az SQL Server olyan tervet hoz létre, amely nem használ sorcél-módosításokat az alábbi kulcsszavakat tartalmazó lekérdezésekkel: - TOP- OPTION (FAST N)- IN- EXISTSEz a tippnév egyenértékű a 4138-at jelző nyomkövetési jelzővel . |
'DISABLE_PARAMETER_SNIFFING' |
Arra utasítja a Lekérdezésoptimalizálót, hogy az átlagos adateloszlást használja egy vagy több paraméterrel rendelkező lekérdezés összeállítása közben. Ez az utasítás függetleníti a lekérdezéstervet a lekérdezés fordításakor először használt paraméterértéktől. Ez a tippnév egyenértékű a 4136-os nyomkövetési jelzővel vagy az adatbázis hatókörébe tartozó konfigurációs beállítással PARAMETER_SNIFFING = OFF. |
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' |
Letiltja a sor módú memóriahasználati visszajelzést. További információ: Sor módú memória visszajelzési. A következővonatkozik: SQL Server 2019 (15.x) és újabb verziók, valamint az Azure SQL Database |
'DISABLE_TSQL_SCALAR_UDF_INLINING' |
Letiltja a skaláris UDF-tagolást. További információ: Skaláris UDF-beillesztés. A következővonatkozik: SQL Server 2019 (15.x) és újabb verziók, valamint az Azure SQL Database |
'DISALLOW_BATCH_MODE' |
Letiltja a kötegelt mód végrehajtását. További információ: Végrehajtási módok. A következővonatkozik: SQL Server 2019 (15.x) és újabb verziók, valamint az Azure SQL Database |
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS' |
Lehetővé teszi az automatikusan generált gyorsstatisztikákat (hisztogrammódosítást) minden olyan vezető indexoszlophoz, amelyhez számosságbecslésre van szükség. A számosság becsléséhez használt hisztogram a lekérdezés fordítási idején van módosítva, hogy figyelembe vegyék az oszlop tényleges maximális vagy minimális értékét. Ez a tippnév egyenértékű a 4139-hez hasonló nyomkövetési jelzővel . |
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' |
Engedélyezi a Lekérdezésoptimalizáló gyorsjavításait (az SQL Server kumulatív frissítéseiben és szervizcsomagjaiban megjelent módosítások). Ez a tippnév megegyezik a 4199-et jelző nyomkövetési jelzővel vagy az adatbázis hatókörébe tartozó konfigurációs beállítással QUERY_OPTIMIZER_HOTFIXES = ON. |
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' |
A lekérdezésoptimalizálót arra kényszeríti, hogy számosságbecslési modellt használjon, amely megfelel az adatbázis jelenlegi kompatibilitási szintjének. Ezzel a tippel felülbírálhatja az adatbázis hatókörébe tartozó konfigurációs beállítást LEGACY_CARDINALITY_ESTIMATION = ON vagy a 9481 nyomkövetési jelzőt . |
'FORCE_LEGACY_CARDINALITY_ESTIMATION'
|
Kényszeríti a lekérdezésoptimalizálót az SQL Server 2012 (11.x) és korábbi verzióinak számosságbecslési modelljének használatára. Ez a tippnév egyenértékű a 9481-et jelző nyomkövetési jelzővel vagy az adatbázis-hatókörű konfigurációs beállítással LEGACY_CARDINALITY_ESTIMATION = ON. |
'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
1 |
A lekérdezésoptimalizáló viselkedését lekérdezési szinten kényszeríti. Ez a viselkedés úgy történik, mintha a lekérdezés adatbázis-kompatibilitási szinttel lett volna lefordítva, n, ahol n támogatott adatbázis-kompatibilitási szint. Az n jelenleg támogatott értékeinek listáját lásd: sys.dm_exec_valid_use_hints. A következővonatkozik: SQL Server 2017 (14.x) CU 10 és újabb verziók, valamint Azure SQL Database |
'QUERY_PLAN_PROFILE'
2 |
Egyszerű profilkészítést tesz lehetővé a lekérdezéshez. Amikor az új tippet tartalmazó lekérdezés befejeződik, egy új kiterjesztett esemény ( query_plan_profile) aktiválódik. Ez a kiterjesztett esemény a query_post_execution_showplan kiterjesztett eseményhez hasonló végrehajtási statisztikákat és tényleges végrehajtási terv XML-t tesz elérhetővé, de csak az új tippet tartalmazó lekérdezésekhez.A következővonatkozik: SQL Server 2016 (13.x) SP 2 CU 3, SQL Server 2017 (14.x) CU 11 és újabb verziók |
'DISABLE_RESULT_SET_CACHE' |
Letiltja az eredményhalmaz gyorsítótárazását (előzetes verzió) egy lekérdezés adott futtatásához, ha az eredményhalmaz gyorsítótára engedélyezve van az aktuálisan csatlakoztatott elemhez. Ez azt jelenti, hogy nem hoz létre új eredménykészlet-gyorsítótárat, és nem használja a meglévő eredménykészlet-gyorsítótárat (ha van ilyen). Ez hasznos lehet hibakeresési vagy A/B-tesztelési forgatókönyvekben. További információ: Eredményhalmaz gyorsítótárazása. A következőre vonatkozik: Microsoft Fabric |
1 A QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n tipp nem bírálja felül az alapértelmezett vagy örökölt számosságbecslési beállítást, ha adatbázis-hatókörű konfiguráción, nyomkövetési jelzőn vagy más lekérdezési tippen, például QUERYTRACEONkényszeríti. Ez a tipp csak a lekérdezésoptimalizáló viselkedését befolyásolja. Ez nem érinti az SQL Server egyéb olyan funkcióit, amelyek az adatbázis kompatibilitási függhetnek, például bizonyos adatbázis-funkciók elérhetőségétől. További információ: Fejlesztői választási lehetőség: Tipping Query Execution model.
2 Ha engedélyezi a query_post_execution_showplan kiterjesztett esemény gyűjtését, a rendszer a kiszolgálón futó összes lekérdezéshez hozzáadja a szabványos profilkészítési infrastruktúrát, ami hatással lehet a kiszolgáló általános teljesítményére. Ha engedélyezi query_thread_profile kiterjesztett esemény gyűjtését, hogy ehelyett egyszerűsített profilkészítési infrastruktúrát használjon, ez sokkal kisebb teljesítményterhelést eredményez, de továbbra is hatással van a kiszolgáló általános teljesítményére. Ha engedélyezi a query_plan_profile kiterjesztett eseményt, ez csak a query_plan_profile végrehajtott lekérdezések egyszerűsített profilkészítési infrastruktúráját teszi lehetővé, ezért nem befolyásolja a kiszolgáló többi számítási feladatát. Ezzel a tippel profilt hozhat létre egy adott lekérdezésről anélkül, hogy a kiszolgáló számítási feladatainak más részeire hatással van. Az egyszerűsített profilkészítésről további információt a Lekérdezésprofil-kezelő infrastruktúracímű témakörben talál.
A támogatott USE HINT nevek listája lekérdezhető a dinamikus felügyeleti nézet sys.dm_exec_valid_use_hints.
Important
Egyes USE HINT tippek ütközhetnek a globális vagy munkamenet szintjén engedélyezett nyomkövetési jelzőkkel, vagy az adatbázis hatókörébe tartozó konfigurációs beállításokkal. Ebben az esetben a lekérdezési szintre vonatkozó tipp (USE HINT) mindig elsőbbséget élvez. Ha egy USE HINT ütközik egy másik lekérdezési tipptel, vagy a lekérdezés szintjén engedélyezett nyomkövetési jelzővel (például QUERYTRACEON), az SQL Server hibát fog generálni a lekérdezés végrehajtásakor.
AZ N'xml_plan' TERV HASZNÁLATA
Kényszeríti a Lekérdezésoptimalizálót, hogy egy meglévő lekérdezéstervet használjon a xml_planáltal megadott lekérdezéshez.
A funkció által kényszerített végrehajtási terv megegyezik vagy hasonló a kényszerített tervhez. Mivel az eredményként kapott terv nem feltétlenül azonos a USE PLANáltal megadott tervvel, a tervek teljesítménye eltérő lehet. Ritkán a teljesítménybeli különbség jelentős és negatív lehet; ebben az esetben a rendszergazdának el kell távolítania a kényszerített tervet.
TABLE HINT ( exposed_object_name [ , <table_hint> [ [ , ] ... n ] ] )
A megadott táblamutatót a exposed_object_namemegfelelő táblára vagy nézetre alkalmazza. Azt javasoljuk, hogy csak egy terv útmutatójánakkontextusában használjon táblamutatót lekérdezési tippként.
exposed_object_name a következő hivatkozások egyike lehet:
Ha a lekérdezés FROM záradékában aliast használnak a táblához vagy nézethez, exposed_object_name az alias.
Ha nem használ aliast, exposed_object_name a
FROMzáradékban hivatkozott táblázat vagy nézet pontos egyezése. Ha például a táblára vagy nézetre kétrészes névvel hivatkozik, exposed_object_name ugyanaz a kétrészes név.
Ha a exposed_object_name táblamutató megadása nélkül adja meg, a lekérdezésben az objektumhoz tartozó táblamutató részeként megadott indexek figyelmen kívül lesznek hagyva. A Lekérdezésoptimalizáló ezután meghatározza az index használatát. Ezzel a technikával kiküszöbölheti egy INDEX táblamutató hatását, ha nem tudja módosítani az eredeti lekérdezést. Lásd J példa.
<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 | SZERIALIZÁLHATÓ | PILLANATKÉP | SPATIAL_WINDOW_MAX_CELLS = integer_value | TABLOCK | TABLOCKX | UPDLOCK | XLOCK
A exposed_object_name lekérdezési tippnek megfelelő táblára vagy nézetre alkalmazandó táblamutató. Ezeknek a tippeknek a leírását a Táblázat tippekcímű témakörben talál.
A INDEX, FORCESCANés FORCESEEK kivételével a táblamutatók nem lesznek engedélyezve lekérdezési tippként, kivéve, ha a lekérdezés már rendelkezik a táblamutatót meghatározó WITH záradékkal. További információ: Megjegyzések szakasz.
Caution
A paraméterekkel rendelkező FORCESEEK megadása korlátozza a Lekérdezésoptimalizáló által figyelembe vehető tervek számát, mint amikor paraméterek nélkül adja meg FORCESEEK. Ez több esetben "A terv nem hozható létre" hibaüzenet jelenhet meg.
A "point_in_time" IDŐBÉLYEGE ESETÉN
A: A Microsoft Fabric raktárára vonatkozik
TIMESTAMP A záradék szintaxisával lekérdezheti azokat OPTION az adatokat, amelyek korábban már léteztek, a Microsoft Fabric Data Warehouse időutazási funkciójának részeként.
Adja meg a point_in_timeyyyy-MM-ddTHH:mm:ss[.fff] formátumban, hogy az adott időpontban megjelenő adatokat adja vissza. Az időzóna mindig UTC-ben van. Használja a CONVERT szintaxist a szükséges dátum/idő formátumhoz 126stílussal.
A TIMESTAMP AS OF tipp csak egyszer adható meg a OPTION záradék használatával. További információkért és korlátozásokért tekintse meg lekérdezési adatokat az elmúlt.
A munkamenet-hatókörű ideiglenes táblákat (#temp_table) a rendszer nem érinti FOR TIMESTAMP AS OF.
FORCE [ SINGLE NODE | ELOSZTOTT ] TERV
A: A Microsoft Fabric raktárára vonatkozik
Lehetővé teszi, hogy a felhasználó eldöntse, hogy egyetlen csomóponttervet vagy elosztott tervet kényszerít-e a lekérdezés végrehajtásához.
Remarks
A lekérdezési tippek nem adhatók meg INSERT utasításban, kivéve, ha SELECT záradékot használnak az utasításban.
A lekérdezési tippek csak a legfelső szintű lekérdezésben adhatók meg, al lekérdezésekben nem. Ha egy táblamutató lekérdezési tippként van megadva, a tipp megadható a legfelső szintű lekérdezésben vagy egy al lekérdezésben. A záradékban TABLE HINT megadott értéknek azonban pontosan meg kell egyeznie a lekérdezésben vagy az al lekérdezésben közzétett névvel.
Táblamutatók megadása lekérdezési tippként
Javasoljuk, hogy a INDEX, FORCESCANvagy FORCESEEK táblamutatót csak egy terv útmutatójánakkontextusában használja lekérdezési tippként. A terv útmutatói akkor hasznosak, ha nem tudja módosítani az eredeti lekérdezést, például azért, mert az egy külső alkalmazás. A tervútmutatóban megadott lekérdezési tippet a rendszer a fordítás előtt hozzáadja a lekérdezéshez, és optimalizálja. Alkalmi lekérdezésekhez csak a TABLE HINT záradékot használja a terv útmutatójának utasítások tesztelésekor. Az összes többi alkalmi lekérdezés esetében javasoljuk, hogy ezeket a tippeket csak táblázatos tippekként adja meg.
Ha lekérdezési tippként van megadva, a INDEX, FORCESCANés FORCESEEK táblamutatók a következő objektumokra érvényesek:
- Tables
- Views
- Indexelt nézetek
- Közös táblakifejezések (a tippet a
SELECTutasításban kell megadni, amelynek eredményhalmaza kitölti a közös táblakifejezést) - Dinamikus felügyeleti nézetek (DMV-k)
- Elnevezett al lekérdezések
Megadhatja INDEX, FORCESCANés FORCESEEK táblatippeket egy olyan lekérdezés lekérdezési tippjeként, amely nem tartalmaz meglévő táblatippeket. Használhatja a meglévő INDEX, FORCESCANvagy FORCESEEK tippek cseréjére is a lekérdezésben.
A INDEX, FORCESCANés FORCESEEK kivételével a táblamutatók nem lesznek engedélyezve lekérdezési tippként, kivéve, ha a lekérdezés már rendelkezik a táblamutatót meghatározó WITH záradékkal. Ebben az esetben egy megfelelő tippet is meg kell adni lekérdezési tippként. Adja meg az egyező tippet lekérdezési tippként a TABLE HINT záradékban található OPTION használatával. Ez a specifikáció megőrzi a lekérdezés szemantikáját. Ha például a lekérdezés tartalmazza a táblamutatót NOLOCK, a tervútmutató OPTION paraméterének záradékának tartalmaznia kell a NOLOCK tippet is. Lásd K példa.
Tippek megadása lekérdezéstár-tippekkel
A Lekérdezéstárban azonosított lekérdezésekre vonatkozó tippeket kódmódosítások nélkül kényszerítheti ki a Lekérdezéstár tippek funkcióval. A sys.sp_query_store_set_hints tárolt eljárással tippet alkalmazhat egy lekérdezésre. Lásd az N példát.
Lekérdezési tipp támogatása a Fabric Data Warehouse-ban
Az adatraktározás a Microsoft Fabricben a lekérdezési tippek egy részhalmazát támogatja:
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
Ezek a lekérdezési tippek kizárólag a Microsoft Fabric Data Warehouse-hoz tartoznak:
- \
, \ , \
Examples
A. A MERGE JOIN használata
Az alábbi példa azt határozza meg, hogy MERGE JOIN futtatja a JOIN műveletet a lekérdezésben. A példa a AdventureWorks2025 adatbázist használja.
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. A OPTIMIZE FOR használata
Az alábbi példa arra utasítja a Lekérdezésoptimalizálót, hogy használja a 'Seattle'@city_name értékét, és a lekérdezés optimalizálása során használja a predikátum átlagos választóképességét az összes oszlopértékre @postal_code. A példa a AdventureWorks2025 adatbázist használja.
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. A MAXRECURSION használata
MAXRECURSION használatával megakadályozhatja, hogy egy rosszul formázott rekurzív közös táblakifejezés végtelen hurokba lépjen. Az alábbi példa szándékosan létrehoz egy végtelen hurkot, és a MAXRECURSION tipp használatával a rekurziós szintek számát kettőre korlátozza. A példa a AdventureWorks2025 adatbázist használja.
--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
A kódolási hiba kijavítása után már nincs szükség MAXRECURSION.
D. A MERGE UNION használata
Az alábbi példa a MERGE UNION lekérdezési tippet használja. A példa a AdventureWorks2025 adatbázist használja.
SELECT *
FROM HumanResources.Employee AS e1
UNION
SELECT *
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
E. A HASH GROUP és a FAST használata
Az alábbi példa a HASH GROUP és FAST lekérdezési tippeket használja. A példa a AdventureWorks2025 adatbázist használja.
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. A MAXDOP használata
Az alábbi példa a MAXDOP lekérdezési tippet használja. A példa a AdventureWorks2025 adatbázist használja.
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. INDEX használata
Az alábbi példák a INDEX tippet használják. Az első példa egyetlen indexet határoz meg. A második példa több indexet határoz meg egyetlen táblahivatkozáshoz. Mindkét példában, mivel a INDEX tippet egy aliast használó táblára alkalmazza, a TABLE HINT záradéknak ugyanazt az aliast is meg kell adnia, mint a közzétett objektum neve. A példa a AdventureWorks2025 adatbázist használja.
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. A FORCESEEK használata
Az alábbi példa a FORCESEEK táblázat tippet használja. A TABLE HINT záradéknak ugyanazt a kétrészes nevet is meg kell adnia, mint a közzétett objektum neve. Adja meg a nevet, amikor egy kétrészes nevet használó táblára alkalmazza a INDEX tippet. A példa a AdventureWorks2025 adatbázist használja.
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. Több táblázatos tipp használata
Az alábbi példa a INDEX tippet az egyik táblára, a FORCESEEK a másikra alkalmazza. A példa a AdventureWorks2025 adatbázist használja.
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. Meglévő táblamutató felülbírálása a TABLE HINT használatával
Az alábbi példa bemutatja, hogyan használható a TABLE HINT tipp. A tippet anélkül használhatja, hogy a lekérdezés INDEX záradékában megadott FROM táblamutató viselkedését felülbírálhatja. A példa a AdventureWorks2025 adatbázist használja.
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. Szemantikát befolyásoló táblatippek megadása
A következő példa két táblázatos tippet tartalmaz a lekérdezésben: NOLOCK, amely szemantikai hatással van, és INDEX, amely nem szemantikai hatással van. A lekérdezés szemantikájának megőrzése érdekében a NOLOCK tipp a terv útmutatójának OPTIONS záradékában van megadva. A NOLOCK tipp mellett adja meg a INDEX és FORCESEEK tippeket, és cserélje le a nem szemantikai hatással rendelkező INDEX tippet a lekérdezésben az utasítás összeállítása és optimalizálása során. A példa a AdventureWorks2025 adatbázist használja.
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
Az alábbi példa egy alternatív módszert mutat be a lekérdezés szemantikájának megőrzésére, és lehetővé teszi az optimalizáló számára, hogy a táblamutatóban megadott indexen kívüli indexet válasszon. A NOLOCK záradékban található OPTIONS tipp megadásával engedélyezheti az optimalizáló választását. Azért adja meg a tippet, mert szemantikai hatással van rá. Ezután adja meg a TABLE HINT kulcsszót, amely csak táblázathivatkozással rendelkezik, és nincs INDEX tipp. A példa a AdventureWorks2025 adatbázist használja.
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. Használd a HASZNÁLATI TIPPET
Az alábbi példa a RECOMPILE és USE HINT lekérdezési tippeket használja. A példa a AdventureWorks2025 adatbázist használja.
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. A QUERYTRACEON HINT használata
Az alábbi példa a QUERYTRACEON lekérdezési tippeket használja. A példa a AdventureWorks2025 adatbázist használja. Az alábbi lekérdezéssel engedélyezheti a 4199 nyomkövetési jelzővel vezérelhető összes tervre hatással lévő gyorsjavítást egy adott lekérdezéshez:
SELECT *
FROM Person.Address
WHERE City = 'SEATTLE'
AND PostalCode = 98104
OPTION (QUERYTRACEON 4199);
A következő lekérdezéshez hasonlóan több nyomkövetési jelzőt is használhat:
SELECT *
FROM Person.Address
WHERE City = 'SEATTLE'
AND PostalCode = 98104
OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137);
N. Lekérdezéstár-tippek használata
A Lekérdezéstár tippek funkció egy könnyen használható módszert biztosít a lekérdezéstervek alkalmazáskód módosítása nélkül történő alakításához.
Először azonosítsa a lekérdezéstár katalógusnézeteiben már végrehajtott lekérdezést, például:
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
Az alábbi példa a lekérdezéstárban azonosított query_id 39-kényszeríti az örökölt számosságbecslőt:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Az alábbi példa a lekérdezéstárban azonosított PERCENT 39-es query_id maximális memóriakiadási méret kikényszerítésére alkalmazza a tippet:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (MAX_GRANT_PERCENT = 10)';
Az alábbi példa több lekérdezési tippet alkalmaz a 39-query_id, beleértve RECOMPILE, MAXDOP 1és az SQL Server 2012 (11.x) lekérdezésoptimalizáló viselkedését:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT (''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Az alábbi példa a tipp alkalmazásával blokkolja a query_id 39-et tartalmazó lekérdezést a ABORT_QUERY_EXECUTION későbbi végrehajtásból. A tipp előzetes verzióban érhető el.
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
O. Adatok lekérdezése időponttól
A: A Microsoft Fabric raktárára vonatkozik
TIMESTAMP A záradék szintaxisával lekérdezheti az OPTION adatokat a múltban, a Fabric Data Warehouse-ban. Az alábbi minta lekérdezés a 2024. március 13-án 19:39:35.28-kor (UTC) megjelenő adatokat adja vissza. Az időzóna mindig UTC-ben van.
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. A lekérdezés egyetlen csomópontot vagy elosztott lekérdezést kényszerít ki
A: A Microsoft Fabric raktárára vonatkozik
Ha a Fabric Data Warehouse-ban lévő lekérdezést egyetlen csomópont használatára szeretné kényszeríteni, használja a FORCE [ SINGLE NODE | DISTRIBUTED ] PLAN tipp.
SELECT OrderDateKey, SalesAmount
FROM FactInternetSales
OPTION (FORCE SINGLE NODE PLAN);
A Fabric Data Warehouse-ban lévő lekérdezés kényszerítéséhez használjon elosztott lekérdezést:
SELECT OrderDateKey, SalesAmount
FROM FactInternetSales
OPTION (FORCE DISTRIBUTED PLAN);
Q. Lekérdezés letiltása az eredményhalmaz gyorsítótárának létrehozásáról vagy alkalmazásáról (előzetes verzió)
A következőre vonatkozik: Microsoft Fabric
'DISABLE_RESULT_SET_CACHE' Az eredményhalmaz gyorsítótárának letiltására használható hint_name egy lekérdezés adott futtatásához. További információ: Eredményhalmaz gyorsítótárazása.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (USE HINT('DISABLE_RESULT_SET_CACHE'));