Kihagyás

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
  • 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
CREATE [MATERIALIZED] VIEW <név> AS <lekérdezés>;

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?

Possible solution
CREATE VIEW Ihatja AS
    SELECT alkesz, sör
    FROM Látogat NATURAL JOIN Felszolgál

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ő