Transact-SQL, indexelt nézetek

Mint azt már tudja, van néhány speciális típusú indexek. Az egyik ilyen speciális típusú indexek indexelt nézetek, melyek a jelen cikkben tárgyalt.

A nézet meghatározása mindig tartalmaz egy kérelmet, úgy viselkedik, mint egy szűrő. Ha egy ötlet nem index, a Database Engine dinamikusan létrehoz egy eredményhalmaz minden lekérdezés hozzáférést a bemutatót. (A „dinamikus” itt azt jelenti, hogy a módosított tartalmát az asztalra mindig meg fog jelenni a megfelelő nézetben.) Ezen felül, ha a nézet számításokat tartalmaz egy vagy több oszlopot a táblázatban, a számítás elvégzése minden hozzáférést a bemutatót.

Ha a SELECT utasítás prezentációfeldoigozó nagyszámú sort egy vagy több táblából, dinamikus létrehozását a lekérdezés eredmény meg csökkentheti a teljesítményt kérelmet. Ha ez a fogalom gyakran használják a lekérdezést, a teljesítmény szintje jelentősen javítható létrehozásával fürtözött index a nézetet. Létrehozása fürtözött index azt jelenti, hogy a rendszer megvalósul dinamikus adatokat az oldalakat az index node szerkezet.

A Database Engine lehetővé teszi, hogy indexek nézeteit. Az ilyen ábrázolások nevezzük indexelt nézetek. Az eredmény által visszaadott benyújtása fürtözött index, az adatbázisban tárolt ugyanúgy, mint a táblázatban a fürtözött index. Ez azt jelenti, hogy a levél csomópontok a B + -fa fürtözött indexet tartalmazza az adatok oldalak.

Indexelt nézetek által létrehozott szintaktikai utasítást bővítmények CREATE INDEX és a CREATE VIEW. A CREATE INDEX neve helyett a tábla jelzi a nézet nevét. Syntax CREATE VIEW nyilatkozat kiterjeszti ajánlat SCHEMABINDING.

Hozzon létre egy indexelt nézet

Indexelt nézet létrehozása két lépésben történik:

Hozzon létre egy nézetet a CREATE VIEW nyilatkozatot a SCHEMABINDING.

Ez létrehoz egy fürtözött index a nézetet.

A következő példa szemlélteti az első lépés létre indexelt nézet - létrehozása bemutatása. Ez a példa azt feltételezi, hogy Works_on tábla nagyon nagy.

Táblázat Works_on bázis SampleDb EnterDate adatbázis tartalmaz egy olyan oszlopot, amely megkezdésének időpontjától a foglalkoztatás az érintett projekt. Minden alkalmazott, aki kezdett dolgozni a projekten belül a megadott hónapban, ki lehet választani a benyújtásra bemutatott példa. Egy minta az eredmény meg Database Engine nem lehet használni a tábla index, mert az index EnterDate oszlop határozza meg az értékét ez az oszlop a teljes dátumot, és nem csak egy hónapra. Ebben az esetben lehet használni indexelt nézet, létrehozását, amely látható az alábbi példában:

Ahhoz, hogy hozzon létre egy indexelt nézet, akkor létre kell hozni egy egyértelmű (egyedi) fürtözött index oszlop (ok) a bemutatót. (Mint korábban említettük, a fürtözött index az egyetlen index típusú adatokat tartalmazó értékeket az oldalak csomópontok.) Létrehozása után az index adatbázis rendszer memóriát ezt a nézetet, akkor tetszőleges számú nem fürtözött indexek, mert most ez az ábrázolás tekinthető mint az (alap) táblázatot.

Egy indexelt nézet hozható létre, ha determinisztikus, azaz nézet mindig vissza ugyanazt az eredményt készlet. Ehhez a következő paramétereket kell beállítani nyilatkozat értéket rendelni ON:

Ezen kívül a paramétert kell rendelni NUMERIC_ROUNDABORT kikapcsolása.

Ellenőrizze, hogy a paramétereket megfelelően a fenti lista lehet telepíteni többféleképpen, amelyeket később tárgyalunk. Ahhoz, hogy hozzon létre egy indexelt nézet az a nézet, meg kell felelniük az alábbi követelményeknek:

az összes alkalmazott a képviselete a funkció (a rendszer és a felhasználó által definiált) kell lennie determinisztikus, azaz az azonos érveket kellene mindig ugyanazt az eredményt;

bemutatás csak azokra alaptáblákhoz;

bemutatása és a linkeket a táblához (k) meg kell egyeznie a tulajdonos és tartozik az ugyanabban az adatbázisban;

képviseletet kell létrehozni SCHEMABINDING opciót. Ez az opció összekapcsolja képviseletét a rendszer, amely a alaptáblákhoz alapjául szolgáló előadás;

felhasználó által definiált függvények által hivatkozott véli, létre kell hozni a javaslat SCHEMABINDING;

SELECT utasítást a képviselet nem tartalmazza az alábbi javaslatokat, paraméterek és más elemek: KÜLÖNÁLLÓ, UNION, TOP, ORDER BY, MIN, MAX, száma, KÜLSŐ, SUM (kifejezések befogadásával NULL érték) subqueries vagy származtatott táblákat.

Mindegyikét kielégíti ezeket a követelményeket lehet ellenőrizni a tulajdonságait paraméter IsIndexable ObjectProperty a tulajdonságokkal rendelkeznek, amint az az alábbi példában. Ha a függvény visszatérési értéke 1, a kilátás minden követelménynek megfelel létrehozásához index érte:

Struktúrájának módosítására egy indexelt nézet

Ahhoz, hogy távolítsa el a különleges fürtözött index indexelt nézet, el is kell távolítani annak minden nem fürtözött indexek. Eltávolítása után fürtözött index képviseleti rendszer úgy ítéli meg, mint egy normál nézetet. Ha töröl indexelt nézet is törli annak összes indexek.

Ha meg akarjuk változtatni a szokásos ábrázolás indexált, akkor neki kell létrehozni fürtözött index. Ehhez először meg kell adnia SCHEMABINDING ajánlatot. Benyújtása el lehet távolítani, majd újra létrehozni, meghatározva SCHEMABINDING javaslat CREATE SCHEMA utasítást, vagy létrehozhat egy másik nézet, amelynek ugyanaz a szöveg, mint a korábbi álláspontját, de van egy másik nevet. Amikor létrehoz egy bemutatót egy másik nevet, akkor gondoskodnia kell arról, hogy ezt a prezentációt teljesíti a követelményeket indexelt nézetek, amelyet az előző részben.

Szerkesztése kapcsolatos információk indexelt nézetek

Ellenőrizze, hogy minden opció SET utasítást aktiválva. használatával sessionproperty tulajdonságok funkciót. Ha a függvény egy értéke 1, a megadott érték van beállítva (vagyis van egy érték). Az alábbi példa bemutatja az ezt a funkciót, hogy ellenőrizze a paraméter értékét QUOTED_IDENTIFIER:

A legegyszerűbb módja az, hogy a dinamikus vezetés nézet sys.dm_exec_session. mert lehetővé teszi, hogy az értékek minden SET utasítást opciók segítségével egyetlen lekérdezést. (. Ismét, ha az oszlop értéke 1, akkor a megfelelő paraméter aktivált) A következő példa bemutatja a használatát ezt a funkciót, hogy megkapjuk értékeit az első négy paraméter SET utasítások:

Annak kiderítésére, hogy egy ötlet valósult meg, azaz, függetlenül attól, hogy lemezterületet használ-e vagy sem, akkor a rendszer eljárás sp_spaceused. A lekérdezés eredménye az alábbi példa mutatja, hogy a képviselet view_enter_month memóriakártyát használ a területen az adatok és konkrét index:

Ez a lekérdezés után a következő eredmény sor:

Előnyök indexelt nézetek

Szintén lehetséges, hogy növelik a termelékenységet komplex reprezentációk gyakran használt lekérdezéseket használja indexelt nézetek két másik előnye van:

Mindezek a változások tükröződnek a megfelelő indexelt nézetek.

Talán a legfontosabb jellemzője az indexelt nézetek, hogy a kérés, hogy nem jelent egyértelmű jelzés a használata az index ebben a nézetben. Más szóval, ha a megkeresés tartalmazza a hivatkozást az oszlop a táblához (vagy táblázatok), ami szintén létezik a indexelt nézetek, és a lekérdezés optimalizáló meghatározza, hogy a legjobb módja annak, hogy végre a lekérdezést, hogy használja a indexelt nézet, hogy kiválasztja a teljesítmény indexek, így táblaindexek, ha a kérelem nem utalnak rájuk kifejezetten.

Amikor létrehoz egy indexelt véve a találati listában tárolja a lemezen (egyidejűleg létrehozásával az index). Így, az összes adatot, amely megváltoztatja a mögöttes táblázatokban is módosítható a megfelelő eredmény meg egy indexelt nézet.

Amellett, hogy minden előnyét, hogy lehet segítségével nyert az indexelt nézetek, van is egy lehetséges hátránya: az indexek indexelt nézetek általában nehezebb fenntartani, mint az alap táblaindexek. Ennek az az oka, hogy a szerkezet egyedülállóan indexelt nézet fürtözött index sokkal bonyolultabb, mint a szerkezet a megfelelő bázis táblázat index.

Jelentősen javítja a teljesítményt a következő további kérelmek esetén indexelt nézeteket, amelyekre vonatkoznak:

kéri, hogy kezelni a nagy sorok számát és a tranzakciók egy olyan vegyületet tartalmaz, vagy összesítő függvények;

egyesítési művelet és aggregációs feladatokat gyakran végzett egy vagy több lekérdezést.

Ha a kérelem utal, hogy a hagyományos ábrázolás, és az adatbázis rendszerre van szükség, hogy feldolgozza a nagyszámú sort a csatlakozni művelet az optimalizáló kiválasztja általában kevesebb, mint az optimális csatlakozási módot. De ha ezt a nézetet, hogy meghatározzák a fürtözött index, a lekérdezés teljesítmény szintje is jelentősen javult, a A lekérdezés optimalizáló használhatják a legmegfelelőbb módszer. (Ugyanez vonatkozik az összesítő függvények.)

Még ha a kérést, arra utal, hogy a hagyományos ábrázolás, és kezeli a nagy vonalak száma, egyébként, ha a gyakori használata az ilyen kérelmet, a kérelem indexelt nézet nagyon hasznos lehet. Ugyanez vonatkozik egy csoport kérelmeket csatlakoztassa ugyanazt a táblázatot, vagy ugyanazt a típusú aggregált funkciókat.

Kapcsolódó cikkek