1 / 76

Lekérdezésfordító

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. <Lekérdezés> ::= <SFW> <Lekérdezés> ::= (<Lekérdezés>)

arion
Download Presentation

Lekérdezésfordító

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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

  3. Leegyszerűsített nyelvtan I. <Lekérdezés> ::= <SFW> <Lekérdezés> ::= (<Lekérdezés>) <SFW> ::= SELECT <SelLista> FROM <FromLista> WHERE <Feltétel> <SelLista> ::= <Attribútum>, <SelLista> <SelLista> ::= <Attribútum>

  4. Leegyszerűsített nyelvtan II. <FromLista> ::= <Reláció>, <FromLista> <FromLista> ::= <Reláció> <Feltétel> ::= <Feltétel> AND <Feltétel> <Feltétel> ::= <Sor> IN <Lekérdezés> <Feltétel> ::= <Attribútum> = <Attribútum> <Feltétel> ::= <Attribútum> = <Konstans> <Sor> ::= <Attribútum>

  5. 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.

  6. 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);

  7. <Lekérdezés> <SFW> SELECT <SelLista> FROM <FromLista> WHERE <Feltétel> <Attribútum> <Reláció> <Sor> IN <Lekérdezés> cím szerepel <Attribútum> (<Lekérdezés>) név <SFW> <SELECT> <SelLista> <FROM> <FromLista> <WHERE> <Feltétel> <Attribútum> <Reláció> <Attribútum> = <Konstans> név színész születés 1983

  8. 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.

  9. 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 <FromLista> relációinak vesszük a Descartes-szorzatát. • A <SelLista> helyett L szerepel, ahol L a <SelLista> attribútumlistája. • A <Feltétel>-t C-vel helyettesítjük, itt C értelemszerűen megadható.

  10. cím  szerepel <Feltétel> <Sor> IN név születés=1983 <attribútum> név színész

  11. 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.

  12. 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.

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

  14. É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 );

  15. 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’.

  16. 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ó.

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

  18. 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.

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

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

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

  22. Projekció/kiválasztás és (multi)halmazműveletek • Kiválasztás és unió (különbség) felcserélése: σF (E1Θ E2) ≡σF (E1) ΘσF (E2), ahol Θ{, –}. • Projekció unióval való felcserélése: ΠX(E1E2) ≡ΠX(E1)ΠX(E2). • 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.

  23. 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.

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

  25. 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))

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

  27. 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).

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

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

  30. 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.

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

  32. Ö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.

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

  34. 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.

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

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

  37. Ö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.

  38. Kiválasztások feljebb csúsztatása • 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) 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;

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

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

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

  42. 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.

  43. 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.

  44. 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.

  45. 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ó.

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

  47. 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?

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

  49. Ö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 Yegyetlen 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.

  50. Ö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 y1, …, yklista 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.

More Related