Windows - A SELECT utasítás OPTION feltétele

6. rész

A SELECT utasítás különféle opcióit tudjuk beállítani az OPTION feltétellel. Ezek a beállítások a fejlett adatbázis alkalmazások esetén válnak lényegessé, változtatásuk, beállításuk komoly szakértelmet feltételez.
OPTION feltétel
Az OPTION segítségével beállítható, hogy melyik útmutatást (query hint-et) használja a feldolgozó a lekérdezéshez. Minden hint egyszer adható meg, habár több lekérdezési útmutatás engedélyezett. Csak egy OPTION feltétel adható meg az utasításban. A lekérdezési útmutatás kihat minden műveleti jelre az utasításban. Ha egy UNION kerül a fő lekérdezésbe, csak az utolsó lekérdezéshez - ami az UNION után következik - tartozhat OPTION feltétel. Ha egy vagy több query hint hatására a lekérdezés optimalizáló nem készít valós térképet, akkor 8622-es sorszámú hibát kapunk.
Mivel a lekérdezés optimalizáló általában a legjobb végrehajtási tervet választja, ajánlott, hogy a <join_hint>, <query_hint>, és <table_hint> paramétereket csak a legutolsó esetben - ha már semmi más nem segít – használjuk.
Szintaxis
[ OPTION ( < query_hint > [ ,...n ) ] 
< query_hint > ::= 
{ { HASH | ORDER } GROUP 
| { CONCAT | HASH | MERGE } UNION 
| { LOOP | MERGE | HASH } JOIN 
| FAST number_rows 
| FORCE ORDER 
| MAXDOP number 
| ROBUST PLAN 
| KEEP PLAN 
| KEEPFIXED PLAN
| EXPAND VIEWS 
} 
Paraméterek
  • { HASH | ORDER } GROUP
Beállítja azt, hogy a GROUP BY, DISTINCT, vagy COMPUTE feltételekben használt összegzés darabolást, vagy rendezést használjon.
  • { MERGE | HASH | CONCAT } UNION
Beállítja, hogy minden UNION műveletet összefésüléssel, darabolással, vagy összefűzéssel hajtson végre. Ha több mint egy UNION útmutatás van beállítva, akkor a lekérdezés optimalizáló kiválasztja a legkevesebb erőforrás igényű stratégiát a beállítottak közül.
  • { LOOP | MERGE | HASH } JOIN
Beállítja, hogy minden join műveletet ciklikus, összefésülő, vagy daraboló eljárással hajtson végre az egész lekérdezésben. Ha több mint egy join útmutatás van beállítva, akkor a lekérdezés optimalizáló kiválasztja a legkevesebb erőforrás igényű stratégiát a beállítottak közül.
Ha ugyanazon lekérdezésben egy join útmutatás szintén megadott egy speciális tábla párosra vonatkozóan, akkor ez az útmutatás elsőbbséget élvez a két tábla összekapcsolásánál, habár a lekérdezési útmutatásoknak kell előnyben részesülniük. Ekképpen a join útmutatása a tábla párosnak csak a join végrehajtási módjának kiválasztását korlátozhatja a query hint-ben.
  • FAST number_rows
Meghatározza, hogy a lekérdezés optimalizált legyen az első number_rows (nem negatív egész szám) számú sor gyors visszaadására. Miután az első number_rows mennyiség megérkezett, a lekérdezés folytatja a futást és előállítja a teljes eredménytáblát.
  • FORCE ORDER
Beállítja, hogy a join sorrend, ami a lekérdezésben lett megadva, maradjon meg az optimalizálás során is.
  • MAXDOP number
Felülírja a maximális párhuzamosítás értékét - sp_configure opció, segítségével korlátozni lehet, többprocesszoros gépeken a processzorok használatát - csupán erre a lekérdezésre. Az adott konfigurációs opcióhoz használható minden szemantikai szabály alkalmazható a lekérdezési útmutatás esetében.
  • ROBUST PLAN
Rákényszeríti a lekérdezés optimalizálót, hogy próbáljon olyan tervet készíteni, amely a lehető legnagyobb sormérettel dolgozik, lehetőség szerint kihasználva a teljesítményt. Amikor a lekérdezés feldolgozásra kerül, átmeneti tábláknak és műveleti jeleknek szükséges lehet, hogy tároljanak és feldolgozzanak olyan sorokat, amelyek nagyobbak akármelyik bemeneti sornál. A sorok túl tágak lehetnek, néhány esetben egy bizonyos operátor nem tudja feldolgozni a sort. Ha ez történik, akkor az SQL szerver hibát ad vissza a futtatás alatt. A ROBUST PLAN használatával előírhatjuk az optimalizálónak, hogy ne vegyen figyelembe olyan lekérdezési tervet, amely ilyen problémát okozhat.
  • KEEP PLAN
Rákényszeríti az optimalizálót, hogy mérsékelje a becsült újrafordítási küszöböt a lekérdezéshez. A becsült újrafordítási küszöb az a pont, ahol egy lekérdezés automatikusan újrafordítódik, amikor az indexelt oszlopok változásának (update, delete, vagy insert) becsült száma változik. A KEEP PLAN megadásával elérjük, hogy a lekérdezés nem fordítódik újra olyan sűrűn, mint amilyen sűrűn változtatás történik a táblában.
  • KEEPFIXED PLAN
Rákényszeríti az optimalizálót, hogy ne fordítsa újra a lekérdezést a statisztikában történő változásnak, vagy az indexelt oszlop változásának (update, delete, vagy insert) köszönhetően. A KEEPFIXED PLAN megadásával elérjük, hogy a lekérdezés csak akkor fordítódik újra, ha az alapját képező táblák sémája változik, vagy egy sp_recompile utasítást indítanak ezekre a táblákra.
  • EXPAND VIEWS
Meghatározza azt, hogy az indexelt nézetek kibővültek, és az optimalizáló nem veszi figyelembe bármelyik nézetet behelyettesítésként a lekérdezés valamely részébe. (Egy nézet kibővül, amikor a nézet neve változik a nézet definíciójával a lekérdezés szövegében.) Ez a lekérdezési útmutatás virtuálisan elutasítja az indexelt nézetek direkt használatát, és indexeket az indexelt nézeteken a lekérdezési tervben.
Az indexelt nézet csak akkor nem bővül ki, amikor a nézetre közvetlen hivatkozás található a lekérdezés SELECT részében és WITH (NOEXPAND) vagy WITH (NOEXPAND, INDEX( index_val [ ,...n ] ) ) meghatározott.
Csak az utasítás SELECT részében lévő nézetre - magában foglalva az INSERT, UPDATE, és DELETE utasításokat – van befolyással az útmutatás.

A Transact-SQL SELECT utasítás cikksorozat