Nézettáblák, indexek
Nézettáblák
- Olyan reláció, amit tárolt táblák (alaptáblák) és más nézettáblák felhasználásával definiálink
- Formái
- Virtuális
- Nincs eltárolva, csak a relációt előállító lekérdezés
- Materializált
- Kiszámolódik, majd tárolásra kerül
- Virtuális
- Ha nincs külön megadva, alapértelmezetten virtuálisan jönnek létre a nézettáblák
- Ugyanúgy lekérdezhetőek, mint az alaptáblák
- Ha a rendszer át tudja vezetni a módosítást, abban az esetben módosíthatóak az alaptáblák a nézettáblákon keresztül
Nézettábla - Példa
Ihatja(alkesz, sör)nézettáblában az alkeszek mellett azon söröket tároljuk, melyeket legalább egy kocsmában felszolgálnak az általa látogatottak közül
CREATE VIEW Ihatja AS
SELECT alkesz, sör
FROM Látogat, Felszolgál
WHERE Látogat.kocsma = Felszolgál.kocsma
Kotlin exercise
That query is massively cringe, can you use some nice \(\Join\), pretty please?
Materializált nézettábla
- Problémás, mert ha minden alaptábla-módosításkor szükségessé válik a frissítés, az hamar költségessé válhat
- Megoldás: Periodikus frissítés a materializált nézettábláknak amik egyébként "nem aktuálisak"
- Példa: adattárház
- Walnut-Markt™️ minden áruházában az eladások adatbázisban tároltak
- Éjjszaka az új adatokat frissítik az áruházlánc adattárházát, ami itt az eladások materializált nézeteiből áll
- Az adattárházon napközben az elemzők trendeket figyelhetnek és következtetéseket vonhatnak le
Indexek
- Olyan adatszerkezet, amivel egy-egy reláció sorait gyorsabban érhetjük el adott attribútumának/attribútumainak értéke(i) alapján
- Lehet egyszerű hash tábla, de DB rendszerekben jellemzően valamilyen B-fákkal van megvalósítva (kiegyensúlyozott keresési fa)
- Nincs rá standard megoldás
- Tipikus szintax:
CREATE INDEX <név> ON <tábla>(<attribútum|attribútum lista>);
Adatbázisok hangolása
- Érdemes alaposan megfontolni, hogy milyen indexeket alkalmazzunk
- A lekérdezések sebességén nagyban tud javítani
- Azonban a módosítások költségesebbé válnak
- Mivel az indexet is módosítani kell
Példa hangolás
THF, látjuk, hogy jelentősen több lekérdezés történik, mint módosítás > érdemes indexen elgondolkodni
Hangolási szakértők
- Fontos kutatási feladat
- A kézi hangolás nagy szakértelmet kíván
- A szakértő először egy lekérdezés terhelési kimutatást (query load) kap kézhez
- Véletlenszerűen lekérdezéseket választanak a korábban végrehajtottak közül
- A tervező átad egy mintát
- A szakértő létrehozza a szerinte fontos indexeket, majd megvizsgálja azok hatását
- Minden minta lekérdezés esetén a lekérdezés optimalizálónak használnia kell az indexeket
- Ebből meg tudja állapítani, hogy javult-e össességében a végrehajtási idő