Tippek a lekérdezésekben (transact-sql)
A lekérdezésben megjelenő utasítások jelzik, hogy a lekérdezésre fel kell használni a promptot. A lekérdezésben szereplő lekérdezések hatással vannak a kijelentés összes szereplőjére. Ha a fő lekérdezés az UNION műveletet használja, csak az utolsó lekérdezés tartalmazhat OPTION-záradatot. A kérelemben szereplő utasítások az OPTION záradék részeként kerülnek meghatározásra. Ha a lekérdezés-optimalizáló nem tartalmaz egy érvényes tervet a lekérdezés egy vagy több promptja miatt, akkor egy 8622 hiba lép fel.
Mivel az SQL Server lekérdezési optimalizáló általában a legjobb lekérdezési tervet választja, csak a tapasztalt fejlesztők és adatbázis-adminisztrátorok ajánlották a végső megoldásként használt tanácsokat.
Megadja, hogy a GROUP BY, DISTINCT és a COMPUTE záradékok aggregátumai hasmenést vagy rendelést használjanak.
Azt jelzi, hogy az UNION összes műveletét UNION készletek egyesítésével, haszálásával vagy egyesítésével végezzük. Ha több UNION kérést ad meg, akkor a lekérdezésoptimalizáló a legrövidebb stratégiát választja a megadott értékek közül.
Azt jelzi, hogy a teljes kérelem összes csatlakozási művelete a LOOP JOIN, MERGE JOIN vagy HASH JOIN ajánlások használatával történik. Ha több kapcsolati prompt van megadva, akkor a lekérdezésoptimalizáló a megengedettnél a legkevésbé költséges stratégiát választja.
Ha egy lekérdezésben a kapcsolódási tippet határozzák meg egy adott táblázatra vonatkozóan a FROM-záradékban, akkor elsőbbséget élvez a két táblázat összekapcsolása, de figyelembe kell vennie a lekérdezésben szereplő utasításokat is. Így a párti táblázatban való csatlakozás tippje csak korlátozhatja a lekérdezéshez szükséges érvényes csatlakozási módok kiválasztását. További információkért lásd a Csatlakozás utalása (Transact-SQL) című részt.
Azt jelzi, hogy a lekérdezés optimalizálva van ahhoz, hogy gyorsan megkapja az első számjegyeket. vonalak. Nem negatív egész számnak kell lennie. Az első számjegyek visszaadása után a lekérdezés továbbra is végrehajtásra kerül, és a teljes eredményhalmazt visszaadja.
Azt jelzi, hogy a lekérdezés optimalizálása során a lekérdezési szintaxis által megadott csatlakozási sorrend megmarad. A FORCE ORDER parancs használata nem érinti a lekérdezés-optimalizáló szerepének lehetséges fordítását. További információ: Hash Connections megértése.
A MERGE utasítás először a forrás táblázathoz, majd a célhoz az alapértelmezett kapcsolódási sorrendben érhető el, hacsak nincs megadva a WHEN SOURCE NOT MATCHED klauzula. Ha megadja a FORCE ORDER beállítást, az alapértelmezett viselkedés megmarad.
Az SQL Server lekérdezési optimalizáló erőfeszítéseinek erőfeszítése érdekében az FORCE ORDER tippet, ha a lekérdezés tartalmaz egy nézetet, olvassa el a Megtekintés felbontása című témakört.
Felülmúlja a parallelismsp_configure konfigurációs paraméterének maximális értékét és a lekérdezés erőforrás-vezérlését, amely meghatározza ezt a paramétert. A MAXDOP lekérdezésben szereplő prompt meghaladhatja a sp_configure eljárásban megadott értéket. Ha a MAXDOP meghaladja az Erőforrás-kezelő által beállított értéket, az Adatbázis motor az ALTER WORKLOAD GROUP (Transact-SQL) által leírt erőforrás-vezérlő MAXDOP értékét használja. A maximális párhuzamossági konfigurációs paraméter által használt összes szemantikai szabály a MAXDOP kérelemben található prompt használatakor alkalmazható. További információért lásd: Maximális párhuzamosság.
Ha a MAXDOP értéke nulla, a kiszolgáló kiválasztja a maximális párhuzamossági fokot. A kiszolgáló 64-ös belső DOP-határt hoz létre.
A lekérdezés-optimalizálónak azt jelzi, hogy a lekérdezés összeállításakor és optimalizálásakor egy adott értéket kell megadnia a helyi változó számára. Az érték csak a lekérdezés optimalizálásakor használható, de nem a végrehajtás során.
A lekérdezésben használt helyi változó neve, amelyhez hozzá lehet rendelni az OPTIMIZE FOR lekérdezéshez szükséges értéket.
Azt jelzi, hogy a lekérdezés optimalizáló a kezdeti érték helyett statisztikákat használ a helyi változó értékének meghatározásához a lekérdezés optimalizálásakor.
A karakteres állandó, amelynek értékét a @ variable_name argumentumhoz hozzárendelik az OPTIMIZE FOR lekérdezéshez tartozó promptban. A literal_constant értéket csak a lekérdezés optimalizálási folyamatában használják, nem pedig a lekérdezés végrehajtásakor a @variable_name értékeként. Az literal_constant értéke bármilyen SQL Server rendszeradat-típus, amely karakter-konstansként fejezhető ki. A literal_constant value típusú adattípusnak implicit módon utalnia kell a lekérdezésben a @ variable_name argumentum által hivatkozott adattípusra.
Az OPTIMIZE FORZÍTÉSE felülírhatja az alapértelmezett paraméter-meghatározást az optimalizálóban vagy egy tervszerkezet létrehozásakor. További információ: A tárolt eljárások újrafordítása és a használt alkalmazásokkal kapcsolatos lekérdezések optimalizálása tervtervekkel.
OPTIMIZÁLT AZ ALKALMAZÁSRA
Ha a lekérdezés össze van állítva és optimalizálva, arra utasítja a lekérdezés optimalizálót, hogy az összes helyi változó kezdeti értéke helyett statisztikai adatokat használjon, beleértve a kényszerített paraméterezéssel létrehozott paramétereket. A kényszerített paraméterezéssel kapcsolatos további információkért lásd: Kényszerített paraméterezés.
Ha a tippeket Optimalizálás @variable_name = literal_constant és optimalizálja az ismeretlen használnak a tooltip egyetlen lekérdezést, a lekérdezés optimalizáló fogja használni az érv literal_constant. egy adott értékre megadott, és a változók fennmaradó értékeire az UNKNOWN. Az értékeket csak a lekérdezés optimalizálási folyamata során használják, de nem a végrehajtás során.
Meghatározza az SQL Server paraméterezési szabályait, amelyekre a lekérdezés optimalizáló a lekérdezésre vonatkozik, amikor összeáll.
A PARAMETERIZÁLÁS lekérdezésének promptja csak a terv struktúráján belül adható meg. Nem határozható meg közvetlenül a lekérdezésben.
A SIMPLE érték arra utasítja a lekérdezésoptimalizálót, hogy egyszerű paraméterezést használjon. A FORCED értéke a lekérdezés optimalizálónak ajánlást ad a kényszerített paraméterezés használatára. A PARAMETERIZÁCIÓ lekérdezésének promptja felülbírálja az aktuális PARAMETERIZÁCIÓ paraméter beállításait az adatbázis tervszerkezetében. További információ: Lekérdezésparaméterezés mechanizmusának megadása tervszerkezetek segítségével.
Meghatározza az SQL Server adatbázismotor összetevőjét, hogy elvetse a lekérdezést követően létrehozott tervet, és a lekérdezésoptimalizáló újrafordítsa a lekérdezési tervet a következő lekérdezés végrehajtásakor. A RECOMPILE prompt feltüntetése nélkül az adatbázismotor elmenti a lekérdezési terveket, és újra felhasználja azokat. A lekérdezési tervek összeállításakor a RECOMPILE lekérdezés parancssorában a lekérdezés összes helyi változójának aktuális értékei kerülnek felhasználásra, és ha a lekérdezés a tárolt eljárásban belül található, az összes paraméter aktuális értékei.
Tipp újrafordítod - ez egy hasznos alternatívája létre egy tárolt eljárás segítségével egy ajánlatot újrafordítása, azokban az esetekben, ahol az újra kell fordítani csak egy része a lekérdezés egy tárolt eljárást, nem pedig az egész tárolt eljárást. További információ: A tárolt eljárások újrafordítása. A RECOMPILE eszköztipp hasznos a tervszerkezetek létrehozásához is. További információ: Lekérdezések optimalizálása a használt alkalmazásokban tervtervekkel.
A lekérdezésoptimalizáló olyan tervet használ, amely a legnagyobb potenciális méretű sorokkal működik, esetleg teljesítményvesztéssel. Lekérdezés feldolgozásakor a közbenső táblák és az operátorok esetleg tárolhatnak és feldolgozhatnak olyan vonalakat, amelyek szélesebbek a beviteli karakterláncok bármelyikénél. A vonalak olyan szélesek lehetnek, hogy néha egyes szolgáltatók nem tudják feldolgozni őket. Amikor ez bekövetkezik, az Adatbázis-motor hibát okoz a lekérdezés végrehajtásakor. A ROBUST PLAN prompt használatával a lekérdezés optimalizáló arra utasítja, hogy ne válassza ki a problémát okozó lekérdezési terveket.
Ha ilyen terv nem lehetséges, akkor a lekérdezés optimalizáló haladéktalanul visszaküldi a hibát, anélkül, hogy késleltetné a hibák észlelését a lekérdezés végrehajtásakor. A sorok változó hosszúságú oszlopokat tartalmazhatnak; az Adatbázis-motor lehetővé teszi a sorok maximális lehetséges méretének meghatározását, amely után az Adatbázis-motor nem tudja feldolgozni őket. Alapjában véve a maximális potenciális méret ellenére az alkalmazás olyan sorokat takar, amelyek tényleges méretei a Database Engine által kezelhető kényszerekkel. Ha az adatbázis-motor egy túl hosszú sztringet észlel, végrehajtási hibát küld vissza.
A lekérdezésoptimalizáló kényszeríti a lekérdezés hozzávetőleges újrafordítási küszöbértékének csökkentését. Becsült küszöb újrafordítása - az a pont, ahol a kérelmet automatikusan újrafordítódik, ha az asztal alatt utasítások végrehajtását UPDATE, DELETE és INSERT megváltozott várható száma indexelt oszlopok. Rámutatva csipetnyi KEEP PLAN, győződjön meg arról, hogy a lekérdezés nem fordítódik újra gyakran, amikor végez a különböző frissítések az asztalra.
A lekérdezésoptimalizáló nem kényszeríti a lekérdezés újrafordítását, amikor a statisztikák megváltoznak. A KEEPFIXED PLAN parancs megadásakor győződjön meg róla, hogy a lekérdezés csak akkor fordul elő újra, ha az alapsáblázat sémája megváltozik, vagy ha a sp_recompile eljárás ellenük történik.
Azt jelzi, hogy indexelt nézetek telepítésre kerülnek, és a lekérdezés optimalizáló nem kezeli az indexelt nézeteket a lekérdezés bármely részének helyettesítésére. A nézet akkor bővül, ha a nézet nevét a lekérdezési szövegben a nézet definíciójával helyettesítik.
A lekérdezés ezen kérdése gyakorlatilag megtiltja az indexelt nézetek és indexek közvetlen használatát a lekérdezési tervben indexelt nézetekhez.
Ez a művelet csak az utasítások SELECT részében található megjelenítésekre vonatkozik, beleértve az INSERT, UPDATEMERGE és DELETE utasításokban található utasításokat.
A lekérdezés maximális rekurzióinak engedélyezett száma. A számszáma 0 és 32 767 közötti nem negatív egész szám, ha 0-t ad meg, akkor nincs korlátozás. Ha ezt a paramétert nem adta meg, akkor az alapértelmezett érték 100.
Ha a lekérdezés végrehajtása során elérte a MAXRECURSION utasítás megadott számát vagy alapértelmezett számát, akkor a kérés végrehajtása befejeződik, és hibaüzenetet kap.
E hiba miatt minden utasítást vissza kell görgetni. Ha ez egy SELECT utasítás, akkor néhány eredményt vissza lehet küldeni, vagy semmit nem lehet visszaadni. Bármely visszaadott részeredmény nem tartalmazhatja az összes sort a rekurzív szinteken, amelyek a megadott maximális rekurziós szintet meghaladják.
A lekérdezés optimalizálót arra használja, hogy használja az "xml_plan" paraméter által megadott lekérdezés meglévő lekérdezési tervét. További tudnivalókért lásd: A lekérdezési tervek megadása a terv kötelező érvényesítésével. Az USE PLAN záradékot nem lehet megadni az INSERT, UPDATE MERGE és DELETE utasításokban.
Adott táblázatos tippet ad a táblázatra vagy a view_object_name argumentumnak megfelelő nézetre. Táblázat-tanácsokat javasoljuk, hogy a lekérdezésekben csak a tervszerkezet kontextusában használják.
A exposed_object_name argumentum az alábbi linkek egyikét képviseli.
Ha egy táblázat vagy nézet álnevét használjuk a lekérdezés FROM-záradékában, akkor ez az alias expozíció_objekt_név.
Ha exposed_object_name argumentum meghatározott megadása nélkül asztal célzást, mind az indexeket a kérelemben meghatározott részeként egy asztal célzást, nem számít, és a használata az index határozza meg a lekérdezés optimalizáló. Ezt a módszert használhatjuk az INDEX tábla-figyelmeztetés hatásának kiküszöbölésére, ha lehetetlen megváltoztatni az eredeti lekérdezést. Lásd a K. példát
Táblázat utalás, amelyet egy lekérdezésre utaló táblára vagy nézetre használnak, amely megfelel az exposed_object_name argumentumnak. A tippek leírását lásd táblázat Tippek (Transact-SQL).
Táblázat tippeket, kivéve INDEX és FORCESEEK, nem megengedettek utasításokat egy lekérdezésben, kivéve, ha a lekérdezés már tartalmazza a WITH javaslat meghatározza az asztal célzást. További információkért lásd az alábbi "Megjegyzések" részt.
A lekérdezésben található tanácsokat nem lehet megadni az INSERT utasításban, hacsak a SELECT klauzulát nem használja a nyilatkozat belsejében.
A lekérdezésben csak a legfelső szintű lekérdezésekben adhat meg utalásokat, de nem a felkérésekben. Ha a táblázatos utalásként szerepel a lekérdezésben, akkor megadhatja azt a legfelső szintű lekérdezésben vagy a beágyazott lekérdezésben. Azonban a TABLE HINT szakaszban a exposed_object_name argumentum értéke pontosan megegyezik a lekérdezés látható nevével vagy a beágyazott lekérdezéssel.
Táblázatmutatók meghatározása lekérdezésként
Ajánlatos az INDEX vagy a FORCESEEK tábla figyelmeztetést a lekérdezésben feltüntetni, csak a tervszerkezet összefüggésében. A tervszerkezetek hasznosak, ha nem tudja megváltoztatni a kezdeti kérelmet, például azért, mert ez egy harmadik féltől származó alkalmazás. A terv struktúrájában megadott lekérdezésben megjelenő lekérdezések hozzáadásra kerülnek a lekérdezéshez, mielőtt összeállítanák és optimalizálnák azokat. Ad hoc lekérdezések esetén a TÁBLÁZAT HINT záradék csak a tervszerkezeti utasítások tesztelésénél használható. Minden egyéb ad hoc lekérdezésnél javasoljuk, hogy ezeket a tanácsokat csak táblajavaslatokként adja meg.
A lekérdezés kéréseként megadott INDEX és FORCESEEK tábla-tanácsok a következő objektumokhoz érvényesek:
Általánosított táblázatok (a hivatkozást egy SELECT utasításban kell megadni, amelynek eredménykészlete kitölti az általánosított táblázat-kifejezést).
Dinamikus adminisztratív nézetek
Nevezett beágyazott lekérdezések
Táblázatmutatók Az INDEX és a FORCESEEK lekérdezéseket megadhat egy lekérdezéshez, amely nem tartalmaz meglévő tábla-tanácsokat. Ezenkívül helyettesíthetik a meglévő INDEX vagy FORCESEEK utasításokat ebben a lekérdezésben. Táblázat tippeket, kivéve INDEX és FORCESEEK, nem megengedettek utasításokat egy lekérdezésben, kivéve, ha a lekérdezés már tartalmazza a WITH javaslat meghatározza az asztal célzást. Ebben az esetben, hogy megőrizzék a szemantika a lekérdezés, meg kell adnia a megfelelő táblázatban célzást a lekérdezéstippnek megkéri a javaslat OPTION kulcsszó TABLE TIPP. Ha például a lekérdezés tartalmaz egy NOLOCK táblázatos tippet, akkor a tervszerkezet @hints paraméterének OPTION-záradéka tartalmaznia kell egy NOLOCK-tippet is. Cm. Példa L. Ha megad egy asztal csipetnyi eltérő INDEX vagy FORCESEEK felhasználásával TABLE TIPP az OPTION záradék nélkül megfelelő lekérdezéstippnek (vagy fordítva), hibajelzést ad 8702, jelezve, hogy ez a lehetőség a javaslat okoz változást a szemantika a lekérdezés, és a kérés hibával zárul. További információkért lásd: Kérdések használata az INDEX és FORCESEEK lekérdezésekben a terv struktúráiban.