Relációs algebra optimalizációja
Példa: Lócsi SZ01-es számláján mennyi pénz van?
számla(név, szamla_azon, összeg)
név szamla_azon összeg Lócsi SZ01 100000 Szakáll SZ02 999999 Lócsi SZ03 0.001 \[ \Pi_{\text{összeg}}(\sigma_{\text{név='Lócsi'}\land\text{szamla\_azon='SZ01'}}(Számla)) \]
Fő cél az adatok elérésének optimalizációja
- I/O műveletek minimalizálása
- Relációk méretének csökkentése
- Az optimalizáció során relációs algebrai azonosságok alkalmazása
- Az eredetivel ekvivalens, de I/O szempontjából optimálisabb lekérdezés készítése
- A \(q, q'\) relációs algebrai lekérdezések ekvivalensek, ha tetszőleges \(I\) előfordulás esetén \(q(I)=q'(I)\) fennál
- Jelölés: \(q\equiv q'\)
Optimalizáció - Példa
\(F = \text{Film(Cím, Év, Hossz)}\)
\(S = \text{Szerepel(Filmcím, Év, Színész)}\)
\(\Pi_{\text{Hossz}}(\sigma_{\text{Cím=Filmcím}\,\land\,\text{F.Év = Sz.Év}\,\land\,\text{Színész='Edus'}}(F\times S))\)
Ekvivalens a
\(\Pi_{\text{Hossz}}(\sigma_{\text{Cím=Filmcím}\,\land\,\text{F.Év = Sz.Év}}(F\times (\sigma_{\text{Színész='Edus'}}(S))))\)
Lekérdezéssel
Az pedig érezhető, hogy az összefűzés előtti szűrés sokszor kevesebb összehasonlítást eredményezhet az összekapcsolás után (a nem 'Edus'-ok elsőre kikerülnek)...
Tulajdonságok - Descartes szorzat és Összekapcsolás
Asszociativitás
Descartes és természetes kapcsolás
A Descartes ugye minden sort minden sorral párosít, a feltétel nélküli Join pedig csak azonos nevű attribútumok szerint, ezért nem kell plusz megkötés
Theta összekapcsolás
Na ugye itt most a feltételeket \((F_1,\;F_2)\) mi adjuk, így biztosak kell legyünk abban, hogy nem csak a közös relációra, de a részekre is valid mind a két feltétel
Kommutativitás
Trivi 💣
Tulajdonságok - Projekció és Szelekció
Halmazműveletek
Projekció sorozat
A kezdő rejációból ha kiemelünk először
Y(a,b,c,d)-r, majd abbólX(b,d)-t, az eredmény ugyanaz lesz, mintha egyből csakX-et emelnél ki.
Kiválasztás és feltételek konjunkciója
Ugye a feltételek láncban alkalmazását ha elvégeznénk is úgy hangzana, hogy: Fogjuk az \(F_2\)-nek, és azokból az \(F_1\)-nek megfelelő sorokat (az \(\land\) meg felcserélhető, so don't you worry)
Kiválasztás és feltételek diszjunkciója
Ugyanaz az elv, csak "kifordítva"
Kiválasztás elé projekció beillesztése
Ez kicsit a subquery-k tétele, ha közben már szűkíteni akarsz az attribútumokon, mielőtt végül kiválasztasz, go ahead
SELECT name, id FROM users WHERE name='Johny'\(\equiv\)
SELECT name, id FROM (SELECT name, id, age FROM users) WHERE name='Johny'Magában ez a tétel csak azt mondja ki, hogy a felesleges al-kiválasztásokat el lehet hagyni, viszont ennek segítségére később még szükség lehet
Felcserélhetőség kiválasztás felett (Descartes / Join)
Itt érdemes visszaemlékezni arra, hogy a Descartes és a Join hogyan is működik, ha az egyik oldalt végzel egy szűrést, az összes hozzá tartozó párosítást is eldobtad így.
Általános alak
Ahol \(\quad attr(F_i)\subseteq attr(E_i)\;(i=(1,2))\quad F=F_1\land F_2\quad\circ\in\{\times,\Join\}\)
Ez ugye a kibővítés, itt arról van szó, hogy a feltételt ha fel tudod bontani külön az
E_1-re és külön azE_2-re vonatkozóan, akkor azt a kapcsolás előtt elvégezheted rajtukDon't forget that Join is expensive
Ebből levezetve
Ahol \(\quad attr(F_i)\subseteq attr(E_i)\;(i=(1,2))\quad F=F_1\land F_2\quad\circ\in\{\times,\Join\}\)
Hasonló megközelítés, itt csak az egyik feltételt emeljük ki a kapcsolás utánra
Felcserélhetőség projekció felett (Descartes, Join)
Ahol $ \quad X=Y\cup Z,\;Y\subseteq attr(E_1),\;Z\subseteq attr(E_2),\quad \circ\in{\times, \Join}$
Kotlin reminder:
Itt a lényeg csak annyi, hogy tök mindegy, előbb sorolod fel
Y(a,b,c),t majd fűzöd összeZ(c,d,e)-vel, minthogy először összefűzöl, majd felsorolod egybeX(a,b,c,d,e)-t (yes, the overlap is intentional)
Halmazműveletek - Projekció
Felcserélhető halmazműveletek - Kiválasztás
Felcserélhető unió - Projekció
Sajnos a metszet nem minden esetben működik, így arra nincs általános szabály (a metszet ha belül üres halmazt alkot, kívül még nem feltétlen)
Példa: (Üres halmazzról minden kiválasztás üres halmaz)
\(\Pi_A(\{\left<A=a,B=b\right>\cap\left<A=a,B=b'\right>\}) = \emptyset\)
Míg
\(\Pi_A(\{\left<A=a,B=b\right>\})\cap\Pi_A(\{\left<A=a,B=b'\right>\}) = \{\left<A=a\right>\}\cap\{\left<A=a\right>\} =\{\left<A=a\right>\}\)
Mert ha már csak egy attribútum marad, szűkebb halmazon nagyobb átfedés lehet (a példában lett is)
Optimalizáció - Feladat
Táblák
Személy(név, kor, város, ISBN)Könyv(cím, író, ISBN, ár)Kiad(k_cím, k_író, város, ország)
Feladat
Kik azok, akik 20 évesek és moszkvai kiadású könyvet kölcsönöztek ki?
Lekérdezésfa
Csúcsok műveletek, levelek pedig Relációk
Lépésenként alulról a csúcsokat a kiértékelés eredményével helyettesítjük, amíg a gyökeret elérve megkapjuk az egész lekérdezéshez tartozó relációt.
Előző feladat lekérdezésfája

Lekérdezésfa - Lépések
Lépések - Kiválasztás
- A kiválasztások konjunkciós feltételeinek szétdarabolása
- \(\sigma_{F_1\land F_2}(E)\equiv\sigma_{F_1}(\sigma_{F_2}(E))\)
- Kiválasztást halmazműveletekkel, Descartes-al és természetes összekapcsolással helyettesíteni
- Célunk a kiválasztásokat minél hamarabb végrehajtani
- Theta összekapcsolást érdemesebb Descartes-en végzett kiválasztással helyettesíteni
- \(R \Join_F S \equiv \sigma_F(R\times S)\)
Darabolás utáni fa

Letolás utáni fa

Lépések - Projekciók
They call it: "Projekciók beírása"
- Célunk csak azokat az oszlopokat megtartani a köztes relációkban, amikre később szükség is lesz
- Jellemzően ez nem nagy nyereség
- Mert a projekciók is költségesek
- Jellemzően ez nem nagy nyereség
- A projekciókra vonatkozó szabályok érvényesülnek
Projekciók beírása után

Lépések - Kapcsolások
- \(\Pi_L(\sigma_C(R \times S))\) és \(\sigma_C(R\times S)\) helyettesíteése Természetes és Theta összekapcsolással

Diszjunkció megjelenésével az optimalizációs algoritmus már nem egyértelmű...
Lépések - Felemelés
They call it "Feljebb csúsztatás"
Példa lekérdezés
\[ \sigma_{\text{év}=2004}(\text{Film}) \]
Kezdeti fa

Második lépés

Eredmény

Leginkább azért, mert a kezdeti szelekció adhat előnyt a másik táblában is