Lekérdezésfordító Adatbázisok tervezése, megvalósítása, menedzselése.

Slides:



Advertisements
Hasonló előadás
Egyszerű oszthatósági problémák
Advertisements

Koordináták, függvények
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
10. gyakorlat SQL SELECT.
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 4. Előadás Az SQL adatbázisnyelv Sorváltozók Alkérdések Ismétlődő sorok Összesítések 1.
Lekérdezések SQL-ben Relációs algebra A SELECT utasítás
Analitikus, statisztikai és szélsőérték fv-k Hári Veronika
Adatbázis rendszerek I Relációs kalkulus Általános Informatikai Tsz. Dr. Kovács László.
Diagnosztika szabályok felhasználásával, diagnosztikai következtetés Modell alapú diagnosztika diszkrét módszerekkel.
Anyagadatbank c. tárgy gyakorlat
Delphi programozás alapjai
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám március.
Többtáblás lekérdezések, allekérdezések Rózsa Győző
SQL – DQL (Data Query Language ) adat lekérdezések
Operációkutatás szeptember 18 –október 2.
SQL Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések
Adatbázis rendszerek II.
Adatbáziskezelés Horváth Ernő.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
A TERMÉSZETTUDOMÁNYOK ALAPJAI 1. Matematika
1.3 Relációk Def. (rendezett pár) (a1 , a2 ) := {{a1} , {a1 , a2 }} .
Lekérdezések végrehajtása
Adatbázis kezelés SQL. Történeti áttekintés 1976IBM:SEQUEL,SQL 1976IBM:SEQUEL,SQL 1983ORACLE 1983ORACLE 1984INFORMIX 1984INFORMIX 1986SQL – szabvány :
Lekérdezésfordító Adatbázisok 2.. Elemzés Lekérdezés Elemző Előfeldolgozó Logikai lekérdezéstervet generáló Lekérdezésátíró Jónak vélt logikai lekérdezésterv.
Algebrai műveleti gráf optimalizálása ● Mennyi könyvet készített az idén legtöbbet kinyomtató Budapesti könyvkiadó? ● kiado(kod,nev,cim) ● konyv ( kiado,cim,ar,ev.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Függvények III Logikai függvények. Hamis A HAMIS logikai értéket adja eredményül. HAMIS( ) A függvény alkalmazása helyett egyszerűen beírhatjuk a HAMIS.
Relációs algebra. A relációs adatbáziskezelő nyelvek lekérdező utasításai a relációs algebra műveleteit valósítják meg. A relációs algebra a relációkon.
SQL. SQL = Structured Query Language (= struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus.
SQL.
Az SQL nyelv alapjai.
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Kifejezések a Pascalban Páll Boglárka. Ismétlés: Ahogy algoritmikából láttuk, a kifejezések a Pascal nyelvben is operátorokból és operandusokból állnak.
Másodfokú egyenletek megoldása
ADATBÁZIS HASZNÁLAT I. 3. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem.
Anyagadatbank c. tárgy gyakorlat
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Függvényjelek (function symbols) (névfunktorok) FOL-ban Névfunktor: olyan kifejezés, amelynek argumentumhelyeire neveket vagy in- változókat lehet írni.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
SQL SELECT parancsok Kottyán László. A bemutató mintatáblái.
1 Informatikai Szakképzési Portál Adatbázis kezelés DQL – Adatlekérdező nyelv.
Adatbázisok gyakorlat
Többtáblás lekérdezések, hierarchikus lekérdezések, allekérdezések
Lekérdezések feldolgozása, kifejezésfák
Relációs algebra Relációs sémák tervezése
ACCESS Lekérdezések, űrlapok, jelentések
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
Adatbázisok használata
1 Például, hogyan, milyen procedúrával értékeljük ki az alábbi SQL (deklaratív) lekérdezést? Legyen adott R(A,B,C) és S(C,D,E). Melyek azok az R.B és S.D.
1 Relációs kalkulusok Tartománykalkulus (DRC) Sorkalkulus (TRC) - deklaratív lekérdezőnyelvek - elsőrendű logikát használnak - relációs algebra kifejezhető.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
Lekérdezések feldolgozása és optimalizálása. Haladó adatbázisokLekérdezések feldolgozása és optimalizálása2 Definíciók Lekérdezés feldolgozása –lekérdezés.
SQL bevezetés Select-From-Where záradékok
Adatbázisok 1. SQL (alkérdések). Az IN használata Emlékezzünk vissza: Az IN után szereplő multihalmaz elemei lekérdezéssel is megadhatók SELECT nev FROM.
SQL aggregálás, csoportosítás és összekapcsolás Adatbázisok 1.
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Szemantikai adatmodellek
Adatbázisok tervezése, megvalósítása és menedzselése
Adatbázis-kezelés (PL/SQL)
Relációs algebra lekérdezések optimalizációja
Nulladrendű formulák átalakításai
Lekérdezésfordító Adatbázisok 2..
Adatbáziskezelés 12. alkalom.
1.3 Relációk Def. (rendezett pár) (a1 , a2) := {{a1} , {a1 , a2 }} .
Adatbázisok használata
XML lekérdezőnyelvek XPath XQuery.
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda
Előadás 03 Algebrai optimalizáció Mi a NULL? Multihalmazok
Relációs algebra lekérdezések optimalizációja
Előadás másolata:

Lekérdezésfordító Adatbázisok tervezése, megvalósítása, menedzselése

Elemzés Lekérdezés Elemző Előfeldolgozó Logikai lekérdezéstervet generáló Lekérdezésátíró Jónak vélt logikai lekérdezésterv

Leegyszerűsített nyelvtan I. ::= ::= ( ) ::=SELECT FROM WHERE ::=, ::=

Leegyszerűsített nyelvtan II. ::=, ::= ::= AND ::= IN ::= = ::=

Elemzőfa Az elemzőfa (parse tree) csomópontjai az alábbiak lehetnek: – atomok: azaz attribútumok, relációk nevei, konstansok, zárójelek, operátorok (+, < stb.), lexikai elemek (SELECT). – Szintaktikus kategóriák.

Példa I. Szerepel (cím, év, név) Színész (név, cím, fizetés, születés) SELECT cím FROM szerepel WHERE név IN (SELECT név FROM színész WHERE születés = 1983);

FROMSELECT színész WHERE IN cím 1983 ( ) szerepel névszületés név =

Előfeldolgozó Ha a lekérdezésben nézettáblát használunk, akkor ezt a megfelelő elemzőfával helyettesíti. Szemantikus ellenőrzés (semantic checking): – relációk használatának ellenőrzése, – attribútumnevek ellenőrzése és feloldása, – típusellenőrzés.

Elemzőfákból logikai lekérdezésterv Ha a lekérdezés nem tartalmaz alkérdést, az átírás könnyen megy. A relációinak vesszük a Descartes-szorzatát. A helyett  L szerepel, ahol L a attribútumlistája. A -t  C -vel helyettesítjük, itt C értelemszerűen megadható.

 cím  név színész IN  születés=1983 név szerepel 

Kétargumentumú kiválasztás A kétargumentumú szelekció az elemzőfa szintaktikus kategóriái és a relációs algebrai operátorok közt képvisel átmenetet. Az alkérdések átírásánál használatos. A baloldali gyermeke a reláció, amire a kiválasztás vonatkozik. A jobboldali gyermek a kiválasztó feltételt jeleníti meg. Mindkét argumentum ábrázolható, mint elemzőfa, mint kifejezésfa és mint a kettő keveréke. Szabályaink vannak, melyekkel a kétargumentumú kiválasztást "normális" kiválasztással és egy másik relációs algebrai operátorral helyettesítjük.

t IN S Tegyük fel, hogy a baloldalon R reláció szerepel, a feltétel pedig t IN S alakú. Ekkor: – a jobboldali feltételt az S-et létrehozó kifejezéssel helyettesítjük. Ha S- ben lehetnek ismétlődések, akkor ezeket ki kell küszöbölnünk. – a kétargumentumú kiválasztást  C -vel helyettesítjük, ahol C-ben a t sor komponenseit tesszük egyenlővé S megfelelő attribútumaival. –  C argumentumaként R és S szerepeljen.

 cím  Sze.név = Szí.név Szerepel Színész  születés=1983  név 

Érdekes eset SELECT DISTINCT sz1.cím, sz1.év FROM szerepel sz1 WHERE sz1.év – 40 <= ( SELECT AVG(születés) FROM szerepel sz2, színész szí WHERE sz1.cím = sz2.cím AND sz1.év = sz2.év AND sz2.név = szí.név );

Szabály alapú optimalizálás Szeretnénk minél kevesebb lemez olvasási és írási (I/O) műveletet végrehajtani egy-egy lekérdezés végrehajtása során. Az legegyszerűbb megközelítés, ha igyekszünk minél kisebb méretű relációkkal dolgozni. Az optimalizáció során relációs algebrai azonosságokat fogunk alkalmazni. Ezek segítségével egy lekérdezésből az eredetivel ekvivalens lekérdezést készítünk, amelynek kiszámítása az esetek többségében kevesebb I/O műveletet igényel majd. A q, q’ relációs algebrai lekérdezések (vagy tetszőleges lekérdezések) ekvivalensek, ha tetszőleges I előfordulás esetén q(I) = q’(I) fennáll. Jelben: q  q’.

Egy példa… A táblák legyenek: Film (cím, év, hossz) Szerepel (filmcím, év, színésznév) Ekkor a következő lekérdezés:  cím (σ cím=filmcím  F.év=Sz.év  színésznév='Edus' (F  Sz)) ekvivalens a  cím (σ cím=filmcím  F.év=Sz.év (F  (σ színésznév='Edus' (Sz)))) lekérdezéssel. Emellett az utóbbi valószínűleg gyorsabban végrehajtható.

Descartes-szorzat és összekapcsolások Asszociativitás: (E 1 Θ E 2 ) Θ E 3 ≡ E 1 Θ (E 2 Θ E 3 ), ahol Θ  { , |X|} és (E 1 |X| F1 E 2 ) |X| F2 E 3 ≡ E 1 |X| F1 (E 2 |X| F2 E 3 ), ha attr(F1)  attr(E1)  attr(E2) és attr(F2)  attr(E2)  attr(E3) Kommutativitás: E 1 Θ E 2 ≡ E 2 Θ E 1, ahol Θ  { , |X|, |X| F }.

Projekció és szelekció Projekció sorozat: Π X (Π Y (E)) ≡ Π X (E), ha X  Y. Kiválasztás és a feltételek konjunkciója: σ F1  F2 (E) ≡ σ F1 ( σ F2 (E)). Kiválasztás és a feltételek diszjunkciója: σ F1  F2 (E) ≡ σ F1 (E)  σ F2 (E). Kiválasztás elé projekció beillesztése: Π X (σ F (E)) ≡ Π X (σ F (Π Y (E))), ahol Y = attr(F)  X.

Kiválasztás és Descartes-szorzat/összekapcsolás Kiválasztás és Descartes-szorzat, összekapcsolás felcserélése: σ F (E 1 Θ E 2 ) ≡ σ F (E 1 ) Θ E 2, ahol attr (F)  attr (E 1 ) és Θ Є { , |X|}. Általánosabban: σ F (E 1 Θ E 2 ) ≡ σ F1 (E 1 ) Θ σ F2 (E 2 ), ahol attr (F i )  attr (E i ) (i = (1, 2)), F = F 1  F 2 és Θ Є { , |X|}.

Kiválasztás és Descartes-szorzat/összekapcsolás Picit másképp: σ F (E 1 Θ E 2 ) ≡ σ F (E 1 ) Θ σ F (E 2 ), ahol attr (F)  attr (E 1 )  attr (E 2 ) és Θ Є { , |X|}. Ezekből levezethető: σ F (E 1 Θ E 2 ) ≡ σ F2 (σ F1 (E 1 ) Θ E 2 ), ahol attr (F 1 )  attr (E 1 ), F = F 1  F 2, de attr (F 2 )  attr (E i ) nem teljesül (i = (1, 2)), Θ Є { , |X|}.

Projekció és Descartes-szorzat/összekapcsolás Projekció és Descartes-szorzat, összekapcsolás felcserélése: Π X (E 1 Θ E 2 ) ≡ Π Y (E 1 ) Θ Π Z (E 2 ), ahol X = Y  Z, Y  attr (E 1 ), Z  attr (E 2 ) és Θ Є { , |X|}.

Projekció/kiválasztás és (multi)halmazműveletek Kiválasztás és unió (különbség) felcserélése: σ F (E 1 Θ E 2 ) ≡ σ F (E 1 ) Θ σ F (E 2 ), ahol Θ  { , –}. Projekció unióval való felcserélése: Π X (E 1  E 2 ) ≡ Π X (E 1 )  Π X (E 2 ). Megjegyzés: nincs általános szabály a projekció különbséggel való felcserélésére. Multihalmaz-műveletek esetén a projekció szintén csak a multihalmaz-egyesítéssel cserélhető fel.

Ismétlődések kiküszöbölése  (R) = R például, ha – R-hez megadtunk egy elsődleges kulcsot, – R-et csoportosítás eredményeként kaptuk. Ismétlődések kiküszöbölése és Descartes-szorzat, összekapcsolás:  (R)   (S)   (R  S),  Є { , |X|, |X| F }. Ismétlődések kiküszöbölése és a kiválasztás:  (  F (R))   F (  (R)). Ismétlődések kiküszöbölése és multihalmaz-metszet:  (R  M S)   (R)  M S  R  M  (S)   (R)  M  (S). A halmazművelek és  felcserélése értelmetlen.

Csoportosítás kiküszöbölése  (  L (R))   L (R).  L (R)   L (  M (R)).

Példa optimalizálásra A következő két feladathoz használt 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) Kik azok, akik 20 évesek, és moszkvai kiadású könyvet kölcsönöztek ki? Π N (σ Sz.ISBN=Kö.ISBN  cím=k_cím  író=k_író  kor=20  K.város=Moszkva (Sz  Kö  K))

Lekérdezésfa Π név   Sz KöK σ Sz.ISBN=Kö.ISBN  cím=k_cím  író=k_író  kor=20  K.város=Moszkva

Kiválasztások "lejjebb csúsztatása" Első lépésben a kiválasztások konjunkciós feltételeit daraboljuk szét elemi feltételekké a σ F1  F2 (E) ≡ σ F1 ( σ F2 (E)) szabály segítségével. Ezek után alkalmazzuk a kiválasztás halmazműveletekkel illetve Descartes-szorzattal és a természetes összekapcsolással való felcserélésének szabályait. Azaz: igyekszünk a kiválasztásokat minél hamarabb végrehajtani, hiszen azok jelentősen csökkenthetik a feldolgozandó köztes relációk méretét. A Théta-összekapcsolást itt jobb, ha egy Descartes-szorzatra és egy azt követő kiválasztásra bontjuk. R |X| F S  σ F (R  S).

Darabolás Π név   Sz KöK σ Sz.ISBN=Kö.ISBN σ cím=k_cím  író=k_író σ kor=20 σ K.város=Moszkva

Letolás Π név   Sz Kö K σ Sz.ISBN=Kö.ISBN σ cím=k_cím  író=k_író σ kor=20 σ K.város=Moszkva

Projekciók "beírása" Ennél a lépésnél igyekszünk csak azokat az oszlopokat megtartani a (köztes) relációkban, amelyekre később szükség lesz. Általában itt nem olyan nagy a nyereség. A projekciók végrehajtása viszont időt igényel, ezért meg kell gondolni, hogy tényleg végre akarjuk-e hajtani a vetítést. Az átalakításoknál értelemszerűen a projekciókra vonatkozó szabályokat használjuk.

  Sz Kö K σ Sz.ISBN=Kö.ISBN σ cím=k_cím  író=k_író σ kor=20 σ K.város=Moszkva Π név Π név, ISBN Π k_cim,k_író Π Kö.ISBN

Összekapcsolások Az utolsó lépésben  L (σ C (R  S)), σ C (R  S) kifejezéseket helyettesítjük természetes összekapcsolással, Théta- összekapcsolással úgy, hogy az eddigivel ekvivalens lekérdezést kapjunk.

|X| Sz Kö K |X| cím=k_cím  író=k_író σ kor=20 σ K.város=Moszkva Π név Π név, ISBN Π k_cim,k_író Π Kö.ISBN

Mi történik, ha a diszjunkció is megjelenik? Kik azok, akik 1000 forintos könyvet vásároltak, és még nincsenek 40 évesek, vagy moszkvaiak, és orosz kiadású könyvet vettek? Π N (σ C  ((ár=1000  kor<40)  (Sz.város=Moszkva  ország=orosz)) (Sz  Kö  K)). Itt Caz Sz.ISBN = Kö.ISBN  Kö.cím = K.k_cím  Kö.író = K.k_író feltételt jelöli.

Megoldás I. |||| Π ISBN σ kor<40 Sz Kö |||| Π név,ISBN Π iró,cím K σ város=Moszkva |  | cím=k_cím  író=k_író σ ország=orosz Π k_író,k_cím Kö σ ár=1000 Π név  Sz Π név,ISBN

Megoldás II. |||| K σ kor<40  város=Moszkva |  | cím=k_cím  író=k_író Sz Π k_író,k_cím,ország Kö σ (kor<40  ár=1000)  (város=Moszkva  ország=orosz) Π név

Összegzés Ha tehát a kiválasztások feltételei diszjunkciót is tartalmaznak, a helyzet bonyolultabbá válik, és nem adható olyan egyértelmű optimalizációs algoritmus, mint konjunkciók esetén.

Kiválasztások feljebb csúsztatása CREATE VIEW film04 AS (SELECT * FROM film WHERE év = 2004); SELECT színésznév FROM film04 f, Szerepel sz WHERE cím = filmcím AND f.év = sz.év; A következő példa azt szemlélteti, amikor egy kiválasztást először felfelé kell csúsztatnunk, hogy aztán letolhassuk. A táblák: Film (cím, év, hossz) Szerepel (filmcím, év, színésznév)

 színésznév σ cím=filmcím  F.év=Sz.év  Sz F σ év=2004 Kezdeti lekérdezésfa

Második lépés  színésznév σ cím=filmcím  F.év=Sz.év  Sz F σ év=2004

És az eredmény…  színésznév σ cím=filmcím  F.év=Sz.év  Sz F σ év=2004

Feladat A táblák legyenek: Film (cím, év, hossz) Szerepel (filmcím, év, színésznév) Színész (név, kor, város) Adjuk meg, hogy a nem budapesti, negyven évesnél idősebb színészek milyen filmekben játszottak 1998-ban. A lekérdezést optimalizáljuk.

Költség alapú optimalizálás A kiválasztott logikai lekérdezéstervet fizikai lekérdezéstervvé alakítjuk át. Különböző fizikai lekérdezéstervek közt válogathatunk. A legjobbat a költségek becslésével választjuk ki. Egy-egy fizikai terv magában foglalja: – sorrend és csoportosítás megadását asszociatív és kommutatív műveletek esetén, – a megfelelő algoritmus kiválasztását minden egyes operátorhoz. – további műveletek megadását, amelyek a logikai tervben nem voltak jelen (beolvasás, rendezés, "extra" projekciók stb.), – annak módját, ahogy egy operátor továbbadja az argumentumokat egy másiknak.

A költség A legfőbb költségtényező továbbra is az I/O műveletek száma. A közbülső relációk általában nyaláboltan helyezkednek el, és ritka kivételektől eltekintve nem tartozik hozzájuk index. Emiatt a köztes relációk esetén az I/O műveletek száma csak a reláció méretétől függ. A sorok mérete jól becsülhető (átlag), vagy pontosan megadható. Így a legfőbb kérdés: a közbülső reláció hány sort tartalmaz.

Milyen becslések kellenek? Könnyen kiszámíthatóak. Elég pontos becslést adnak. Logikailag konzisztensek. Azaz: például az összekapcsolások esetén a becslés nem függ a relációk összekapcsolásának sorrendjétől. Megjegyzés: a vetítések mérete sok esetben pontosan, vagy majdnem pontosan megadható.

Kiválasztás méretének becslése I. S =  A=c (R) esetén: S =  A<c (R) esetén: S =  A  c (R) esetén: T(S) = T(R), vagy: ez Zipfian-eloszlás esetén is jó, ha a konstanst véletlenszerűen választjuk.

Kiválasztás méretének becslése II. S =  C1  C2 (R) esetén a szelektivitási tényezőkkel szorzunk. Az előbbiek értelmében a szelektivitási tényező:  1, = 1/V(R,A), < 1/3. Példa: S =  A=10  B<20 (R) esetén hány sora lesz S-nek a becslésünk szerint? T(R) = 10000, V(R,A) = 50. És S =  A=10  A>20 (R) esetén?

Kiválasztás méretének becslése III. S =  C1  C2 (R) esetén tegyük fel, hogy m 1 sor teljesíti C 1 -t és m 2 sor C 2 -t. Ekkor (T(R) – m 1 ) (T(R) – m 2 ) sor nem teljesíti egyik feltételt sem. Tehát: T(S) = T(R) – (T(R) – m 1 ) (T(R) – m 2 ).

Összekapcsolások méretének becslése I. Théta-összekapcsolás esetén az R |X| C S   C (R  S) szabály használható. Equi-join esetén a természetes összekapcsolásra vonatkozó becslések alkalmazhatóak. A természetes összekapcsolás méretének becsléséhez tegyük fel, hogy R(X, Y), S(Y, Z) relációknál az Y egyetlen attribútumot tartalmaz. Ekkor T(R|X|S) lehet: – 0, ha nincs közös y értéke a két reláció Y attribútumának. – T(R), ha Y S kulcsa, R-nek pedig idegen kulcsa. – T(R)T(S), egyetlen y érték szerepel R-ben és S-ben is.

Összekapcsolások méretének becslése II. Két egyszerűsítő feltételezés, amelyek azonban sok esetben teljesülnek: – értékhalmazok tartalmazása: Y mindig egy rögzített y 1, …, y k lista elejéről kap értéket. Így: V(R, Y)  V(S, Y) esetén R minden értéke S-nek is értéke. – Értékhalmazok megőrzése: ha A nem összekapcsolási attribútum, akkor: V(R|X|S, A) = V(R, A). Mindkét feltétel teljesül például, ha Y S-ben kulcs, R-ben idegen kulcs. A második feltétel csak akkor nem teljesülhet, ha R-ben vannak lógó sorok, de még akkor sem feltétlen teljesül.

Összekapcsolások méretének becslése II. Tegyük fel, hogy V(R, Y)  V(S, Y). Rögzítsük R egy t sorát. Ekkor 1/V(S, Y) az esélye annak, hogy t S egy sorához kapcsolódik. A kapcsolódó sorok várható száma tehát: T(S)/V(S, Y). Így az összekapcsolás mérete:

Összekapcsolások méretének becslése III. Hasonló gondolatmenettel belátható, hogy R(X, Y 1, Y 2 ) |X| S(Y 1, Y 2, Z ) esetén az összekapcsolás mérete:

Összekapcsolások méretének becslése IV. S = R 1 |X| …|X| R n esetén tegyük fel, hogy az A attribútum R 1, …, R k -ban fordul elő. Tegyük fel továbbá, hogy: V(R 1, A)  …  V(R k, A). Válasszunk ki R 1, …, R k -ból egy-egy sort. Ekkor a t i sor 1/V(R i, A) valószínűséggel egyezik meg t 1 -gyel. Emiatt T(S) becsléséhez az egyes relációkban szereplő sorok számának szorzatát, minden egyes A attribútum esetén, ami legalább két relációban előfordul, a legkisebb kivételével osszuk el az összes V(R, A) értékkel.

Példa R (A, B, C)S (B, C, D)U (B, E) T(R) = 1000T(S) = 2000T(U) = 5000 V(R, A) = 100V(S, B) = 50V(U, B) = 200 V(R, B) = 20V(S, C) = 100V(U, E) = 500 V(R, C) = 200V(S, D) = 400 Mekkora lesz R |X| S |X| U mérete?

Halmazműveletek Multihalmaz-egyesítés esetén a két reláció méretének összege adja az eredmény méretét. Halmazegyesítésnél pedig: (T(R) + (T(R) + T(S))) /2-vel becsülhetünk. Multihalmaz-metszet a természetes összekapcsolás egy speciális esete, tehát az ott adott becslés itt is használható. Vagy: a kisebbik reláció sorszámának a fele. AB AB A multihalmaz-metszet méretének becslésére itt milyen értékeket kapunk?

Ismétlődések kiküszöbölése és csoportosítás  (R (A 1, …, A n )) mérete pontosan V(R, [A 1, …, A n ]), ez az érték azonban sokszor nem áll rendelkezésünkre. Egy felső korlát a méretre a V(R, A i ) értékek szorzata. Jelöljük ezt V-vel. Elfogadható becslés: T(R)/2 és V közül a kisebbik.  L (R) esetén a méret pontosan V(R, [B 1, …, B k ]), ha L-ben a B 1, …, B k csoportosító attribútumok szerepelnek. Itt is felső korlát a csoportok számára a V(R, B i ) értékek szorzata. Legyen ez W. Szintén elfogadható becslés, ha T(R)/2 és W közül a kisebbiket választjuk.

Példa költségek becslésére I.  R  A=10 S |X| R (A, B)S (B, C) T(R) = 5000T(S) = 2000 V(R, A) = 50V(S, B) = 200 V(R, B) = 100V(S, C) = 100

Példa költségek becslésére II.  R  A=10 S |X|  Mi a terv végrehajtási költségének a becslése?

Példa költségek becslésére III.  R  A=10 S |X| És itt?

Összekapcsolások sorrendje Már két reláció összekapcsolásánál is sok esetben számít, hogy melyik reláció áll a baloldalon és melyik a jobbon. Egymenetes összekapcsolásnál feltételezzük, hogy a kisebbik relációt olvassuk be a memóriába teljesen. Beágyazott ciklusú összekapcsolásnál szintén a kisebbik reláció szerepel a baloldalon, ami külső ciklus relációja. Indexes összekapcsolás esetén pedig a jobb argumentum rendelkezik indexszel.

Összekapcsolási fák |X| U T SR UT S R bal-mély összekapcsolási fajobb-mély összekapcsolási fa

Miért a bal-mély összekapcsolási fák? Sok esetben csak (vagy majdnem csak) a bal-mély összekapcsolási fákat veszik figyelembe az összekapcsolások sorrendjének meghatározásánál. Egyrészt így nagyban csökken a lehetőségek száma. Másrészt a bal-mély fák jól együttműködnek a szokásos összekapcsolási algoritmusokkal: különösen az egymenetes és a beágyazott ciklusú összekapcsolásokkal.

Összekapcsolási sorrendek száma Jelölje T(n) az n relációhoz tartozó faformák számát. Ekkor: T(2) = 1, T(3) = 2, T(4) = 5, T(5) = 14, T(6) = 42. Azaz hat reláció összekapcsolásakor 42  6! = lehetőséget kellene figyelembe venni. A bal-mély fák esetén ezzel szemben csupán 6! = 620 lehetőség kínálkozik.

Egymenetes összekapcsolás bal-mély fa Tegyük fel, hogy R |X| S|X| T |X| U-t szeretnénk kiszámítani. R |X| S kiszámításához R relációt kell a memóriában tartani, majd R|X| S-et is. Tehát B(R) + B(R|X| S) memóriapufferre van szükség. (R|X| S) |X| T kiszámításánál az R által elfoglalt memóripufferekre már nincs szükség. Hasonlóképpen az U-val való összekapcsolás során az R|X| S memóriapufferei szabadíthatók fel. Így a szükséges helymennyiség: B(R) + B(R|X| S) illetve B(R|X| S) + B((R|X| S) |X| T).

Egymenetes összekapcsolás jobb-mély fa Itt elsőként az R relációt kell betölteni a központi memóriába, majd létre kell hozni az S |X| (T |X| U) relációt. Ehhez S-et szintén be kell olvasni a memóriába, T |X| U kiszámításánál pedig U-t. Összesen tehát B(R) + B(S) + B(T) helyre van szükség. Mivel sok esetben legalább az egyik reláció kisebb, mert tartalmaz egy szűrést, emiatt B(R) + B(S) + B(T) nagyobb, mint B(R) + B(R|X| S) vagy B(R|X| S) + B((R|X| S) |X| T). Emiatt a bal-mély összekapcsolási fák használata előnyösebb.

Beágyazott ciklusú összekapcsolás bal-mély fa Tegyük fel ismét, hogy R |X| S|X| T |X| U-t szeretnénk kiszámítani. Tegyük fel még, hogy R, S, T, U tárolt relációk. Ekkor R |X| S|X| T egy megfelelő darabját beolvassuk a memóriába, majd a maradék területen U blokkjait vesszük sorra. U-t itt azonban nem kell előállítani, csupán be kell olvasni. Hasonlóan R |X| S|X| T előállításakor, T blokkjait kell beolvasni, viszont T-t nem kell külön előállítani.

Beágyazott ciklusú összekapcsolás jobb- mély fa Ezzel szemben jobb-mély fák esetén R egy megfelelő darabját olvassuk be a memóriába, majd meg kell konstruálnunk S|X| T |X| U-t. Amikor R következő darabját olvassuk be, az iménti relációt újfent elő kell állítani. Stb.

Dinamikus programozás I. A dinamikus programozás mögött az az alapötlet áll, hogy kitöltünk egy táblázatot a költségekről úgy, hogy a csak a sikeres következtetéshez szükséges minimális információt őrizzük meg. R 1, …, R n összekapcsolása esetén ebben a táblázatban a következők szerepelnek az egyes R i1, …, R ik részhalmazokhoz: – R i1 |X| … |X| R ik becsült mérete. – Az összekapcsoláshoz szükséges legkisebb költség. Először a legegyszerűbb becslést használjuk majd, azaz a köztes relációk mérete adja majd a költséget. – Az a kifejezés, ami ezt a legkisebb költséget adja.

Dinamikus programozás II. Egyetlen R reláció esetén a táblázat egy bejegyzése R méretét, 0 költséget és R-et tartalmazza kifejezésként. {R i, R j } pár esetén a méretre a korábbi becslést használjuk. A költség (azaz közbülső relációk mérete) 0, baloldalon a kisebbik méretű reláció szerepel. Indukciós lépés {R 1, …, R k }: – bal-mély fák esetén vesszük azt a {R i1, …, R ik-1 } bejegyzést, amire a költség + méret érték a legkisebb. Legyen az ehhez tartozó kifejezés P. Ekkor az új bejegyzés P |X| R lesz, ahol R jelöli a kimaradt relációt. A költséget az {R i1, …, R ik-1 } bejegyzéshez tartozó költség + méret összeg adja. A méret a szokásos módon becsülhető. – Általános esetben P 1, P 2 kételemű partícióit vesszük {R 1, …, R k }-nek. Keressük azt a partíciót, amire P 1, P 2 költségeinek és méreteinek összege minimális.

Példa R (A, B)S (B, C)T (C, D)U (D, A) V(R, A) = 100V(U, A) = 50 V(R, B) = 200V(S, B) = 100 V(S, C) = 500V(T, C) = 20 V(T, D) = 50V(U, D) = 1000

Első lépés {R}{S}{T}{U} méret1000 költség0000 kifejezésRSTU

Második lépés {R, S}{R, T}{R, U}{S, T}{S, U}{T, U} méret50001M M1000 költség kifejezésR |X| SR |X| TR |X| US |X| TS |X| UT |X| U Itt 1M 1 milliót jelöl.

Harmadik lépés {R, S, T}{R, S, U}{R, T, U}{S, T, U} méret költség kifejezés(S|X|T)|X|R(R|X|S)|X|U(T|X|U)|X|R(T|X|U)|X|S

Utolsó lépés CsoportosításKöltség ((S |X| T) |X| R) |X| U12000 ((R |X| S) |X| U) |X| T55000 ((T |X| U) |X| R) |X| S11000 ((T |X| U) |X| S) |X| T3000 (T |X| U) |X| (R |X| S)6000 (R |X| T) |X| (S |X| U) (S |X| T) |X| (R |X| U)12000

Pontosabb költségfüggvények Költségként eddig a közbülső relációk méretét használtuk, ez azonban sok esetben túlságosan durva becslést ad. Példa: R(A, B), S(B, C) összekapcsolása, ahol R egyetlen sorból áll. Ekkor R |X| S kiszámítása messze nem ugyanolyan költségű akkor, ha S B attribútumára létezik egy indexünk, vagy nem létezik. Az általunk alkalmazott költségbecslés azonban ezt a különbséget nem veszi figyelembe.

Mohó algoritmus Ha az összekapcsolandó relációk száma nagy, a dinamikus programozás túlságosan is lassúvá válhat (hiszen az algoritmus exponenciális lépésszámú). Ekkor mohó algoritmust használhatunk, ahol soha nem lépünk vissza, vagy vizsgáljuk felül az egyszer már meghozott döntéseket. Mohó algoritmus bal-mély fák esetén: – kezdjük azzal a relációpárra, amelyek összekapcsolásának a mérete a legkisebb. – Indukció: a még nem szereplő relációk közül keressük meg azt, amelyiket az aktuális fával összekapcsolva a legkisebb becsült méretű relációt kapjuk. Az új aktuális fa bal argumentuma a régi aktuális fa, jobb argumentuma pedig a kiválasztott reláció lesz. Az előző példa esetén hogyan működik ez az algoritmus?