Megosztás a következőn keresztül:


Lekérdezési tippek (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-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:

  • UPDATE
  • DELETE
  • MERGE
  • INSERT

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 FOR lekérdezési tipptel való használatra.

  • UNKNOWN

    Megadja, 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 FOR hozzá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
- EXISTS

Ez 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 FROM zá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 SELECT utasí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 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

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'));