Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1 Základné výpočty relačných operátorov
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1
Základné výpočty relačných operátorov
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 2
Plán: Strom relačných operátorov s výberom algoritmu pre kazdy operátor. Each operator typically implemented using a `pull’ interface: when
an operator is `pulled’ for the next output tuples, it `pulls’ on its inputs and computes them.
Dva hlavné otazky optimalizácie dopytov Pre daní dopyt, Aké plány zvažujeme? Aké sú odhadované náklady na dopy?
Ideál: Chceme nájst najlepší plán. Prakticky: Chceme sa vyhnúť najhorším plánom
System R prístup – každý select do nejakej logiky
Základné výpočty relačných operátorov
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 3
Zaužívané techniky Algoritmus na evaluaciu relačných operátorov
používa niekoľko jednoduchých ideí, hlavne(záleží od uloženia dát): Indexovanie: Používa WHERE konštrukciu na
získanie maleho množstva riadkov (selekcií, joinov) Iterácia: Niekedy je rychlejší table scan, akoby tam
mal byť index(a niekedy možeme využiť indexy )) Partitioning: Využitím triedenia a hashovania,
možme vstupné riadky rozdelit(na menšie dáta) a tym nahradiť drahšie operácie rovnakými ale na menšom vstupe
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 4
Štatistiky a Metainformácie(Catalogs)
Potrebujeme informácie o reláciach a indexoch. Metainformácie typicky obsahujú aspoň:
– počet riadkou(NTuples) a počet strán (NPages) pre každú reláciu– počet kľúčov na indexoch(NKeys) a NPages pre každý index– výška indexu, najmenšia/najväčšia hodnota kľúča pre každý strom
indexu. Metainformácie sa updatuju pravidelne (periodicky)
updatovanie vždy ked sa dáta zmenia je príliž drahé Napr. keď je úpadok DB
Niekedy sú uložené aj viac detailnejšie informácie napr. Údaj o používateľoch a právach, histogramy hodnôt v niektorých poliach.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 5
Prístupové cesty Prístupova cesta je spôsob získavania riadkov
File scan alebo index , ktorý zodpovedá selekcii v dopyte tree index zodpovedá výrazom (konjunkcii), ktoré
obsahujú len atribúty v prefixe hľadacieho čísla napr. tree index na <a, b, c> zodpovedá selekcii a=5 AND b=3,
a a=5 AND b>6 ale nie b=3. hash index zodpovedá (konjunkcii) výrazom, ktoré
majú výraz atribút = hodnota pre každý atribút vo vyhľadavacom kľúči indexu napr hash index ona <a, b, c> zodpovedá a=5 AND b=3 AND
c=5; ale nezodpovedá b=3, alebo a=5 AND b=3, alebo a>5 AND b=3 AND c=5.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 6
Poznámka o komplexnosti selekcií
Podmienky selekcie sa najpr prevedú do konjunktivnej normálnej formy(CNF):
(day<8/9/94 OR bid=5 OR sid=3 ) AND
(rname=‘Paul’ OR bid=5 OR sid=3)
(day<8/9/94 AND rname=‘Paul’) OR bid=5 OR sid=3
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 7
Jeden prístup k selekcii
Najdi najviac selektívnu prístupovú cestu, získaj riadky pomocou nej a aplikuj všetky výrazy, ktoré nezodpovedajú indexu: Najviac selektívna prístupová cesta: Aindex alebo file scan,ktory
predpokladáme, že bude vyžadovať najmenej I/O operácií. Výrazy,ktoré zodpovedajú tomuto indexu znižujú, počet
získaných riadkov; ine výrazy sa používajú na vyradenie niektorých získaných riadkov, ale nemajú efekt na počet získaných riadkov/stránok
Uvažujme day<8/9/94 AND bid=5 AND sid=3. Môžeme použiť B+ tree index na day ; potom, bid=5 a sid=3 musíme otestovať pre každý získaný riadok. Podobne môžeme použiť hash index na <bid, sid>; potom musím otestovať day<8/9/94
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 8
Použitie indexov na selekty Cena závisí od počtu spĺňajúcich riadkov a klastrovania
Cena hľadania kvalifikovaných listových záznamov(tipicky malých) plus cena získaných záznamov (môže byť veľké w/o klastrovanie).
V príklade,za predpokladu rovnomerného rozdelenia mien, zodpovedá okolo 10% riadkov.(100 stránok 10000 riadkov). S klastrovaným indexom je cena niečo viac ako 100 I/O operácií; pri neklastrovanom viac ako 10000 I/O operácií
• Povodná tabuľka 1000 stránok Dôležité vylepšenia pre neklastrované indexy:
1. Nájsť kvalifikované listové záznamy 2. Udrieďiť podla rid 3. Zobraziť rid v poradí. Toto zaistuje,že každa stránka je prezeraná
práve raz.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 9
Prienik rid prístup :
Zoberieme množiny rid z dátových záznamov použitím každého indexu
Potom spravíme prienik množín Získame záznamy a použijeme všetky výrazy Príklad: Uvažujme day<8/9/94 AND bid=5 AND sid=3. Ak
máme B+ strom index na day a index na sid, obe používajúce Alternatívu (2), môžeme dostat rid záznamov zodpovedajúce day<8/9/94 pre prvý index a rid záznamov zodpvoedajúce sid=3 pre druhý index, spraviť prienik a získat záznami a potom spraviť kontrolu pre bid=5
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 10
Projekcia Prístup založený na sortovaní:
Zmeniť Pass 0 externeho triedenia na elimináciu echcených polí. Tak je vyprodukovená sekvencia 2B stránok, ale riadky su menšie ako vo vstupnej sekvencií (Pomer veľkostí závisí od počtu a veľkosti polí, ktoré sú vynechané)
Zmeniť zlučovacie prechody na elimináciu duplicít. Takto počet výsledných riadkov je menši ako vstup(zmena závisý od počtu duplicít)
Cena: V Pass 0, prečítame pôvodnú reláciu(size M) , vypíšeme rovanke malé množstvo riadkov V zlučovacích prechodoch, menej riadkov sa vypiše pre každý prechod. príklad: 1000 vstupných stránok sa zredukuje na 250 v Pass 0 ak pomer velkosti je 0.25
SELECT DISTINCT R.sid, R.bidFROM Reserves R
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 11
Projekcia založená na hash deliaca fáza : Prečítať R použitím vstupného buffra. Pre
každý riadok, odstraniť nežiadúce polia, aplikovať hash funkciu h1, aby sa vybral jeden z B-1 výstupných buffrov. Výsledok je B-1 particií (s riadkami so žiadnými neželanými
poliami). Dva riadky z rôzných particií zaručuju jedinečnosť.
B main memory buffers DiskDisk
Pôvodnárelácia Výstup
2Vstup
1
hashfunctionh B-1
Partície
1
2
B-1
. . .
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 12
Projekcia založená na hashingu Deliaca fáza:: Prečitať R použitím niektorého vstupného buffra.
Pre každý riadok odstrániť neželané polia, aplikovať hash funkciu h1 na výber jedneho z B-1 výstupných bufforv
– Výsledok je B-1 particií (s riadkami so žiadnými neželanými poliami). Dva riadky z rôzných particií zaručuju jedinečnosť.
Zopakovať eliminačnú fázu: Každú particiu: prečítaťju a vytvoriť v pamäti hash tabulku použitím hash fn. h2 (<>h1) na všetky polia, čím sa odstrania duplicity.
– Ak sa particia nezmestí do pamäte, môžeme na ňu použiť rekurzívne projekčný algoritmus založený na hashy
Cena: Fpre delenie prečitač R, vypísať každý riadok s menším počtom poli. To je čítané v ďalšej fáze.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 13
Diskusia o projekcii Prístup založený na triedení je štandardom;Sort-based
approach is the standard; lepšia manipulácia so šikmými dátami a výsledok je usporiadaný
Ak index na relácii obsahuje všetky požadované atribúty v svojom kľúči, možeme robiť iba indexový sken. Apilukjeme techniky projekcie na listové dáta
Ak utriedený index obsahuje všetky požadované atribúty ako prefix kľúča možeme spraviť lepšie: Získať listové dáta usporiadane(index-only scan), odstrániť
nežiadúce polia, Retrieve data entries in order (index-only scan), discard unwanted fields, porovnať vedľajšie riadky na kontrolu duplicity.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 14
Vyhodnotenie relačných operácií (joiny)
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 15
Relačné operácie Budeme zvažovať ako implementovať:
Selekcie ( ) vyberie podmnožinu riadkov z relacie Projekcie ( ) vymaže nežiadúce riadky z relácie Joiny ( ) povoľuje kombinovať dva relácie Set-difference ( ) riadky v relácií 1. ale nie v relácii 2. Zjednotenie ( ) riadky v relácii 1. aj v relácii 2. Agregácia (SUM, MIN, atď.) a GROUP BY
Odkedy každá operácia vracia reláciu, operácie môžeme skldať.
σπ
−
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 16
Schéma príkladov
Podobná ako stará schéma; pridané rname Reserves:
– Každý riadok je 40 bytes dlhý, 100 riadkov na stránku, 1000 stránok.
Sailors:– Každý riadok je 50 bytes dlhý, 80 riadokv na stránku,
500 stránok.
Sailors (sid: integer, sname: string, rating: integer, age: real)Reserves (sid: integer, bid: integer, day: dates, rname: string)
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 17
Equality Joins With One Join Column
V algebre: R S. Bežnosť! Musí byť opatrne optimalizované. R S je veľké; takže, R S nesledované po selekcii je neefektívne.
Predpokladajme: M riadkov v R, pR riadkov na stránku, N riadkov v S, pS riadkov na stránku. V našom príklade, R je Reserves a S je Sailors.
Komplexnejsie joiny budeme uvažovať neskôr. Cost metric: počet I/O operácií. Zvyšok ingorujeme
SELECT *FROM Reserves R1, Sailors S1WHERE R1.sid=S1.sid
×× ×
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 18
Jednoduché vnorené joiny
Pre každý riadok vo vonkajsej R, skenujeme celú reláciu S Cena: M + pR * M * N = 1000 + 100*1000*500 I/Os.
Stránkovo orientované vnorené joiny:Page-oriented Nested Loops join: Pre každú stránku z R, dostaneme každú stránku z S, a vypíšeme zodpovedajúce dvojice riadkov <r, s>, kde r je v R-page a S je v S-page. Cena: M + M*N = 1000 + 1000*500 Ak menšia relácia je vonkajsia,cena = 500 + 500*1000
foreach tuple r in R doforeach tuple s in S do
if ri == sj then add <r, s> to result
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 19
Indexové vnorené joiny
Ak je index na joinovanom stĺpci na jednej z relácií,môžeme z neho spraviť vonkajší a využiť index. Cena: M + ( (M*pR) * cost of finding matching S tuples)
Pre každý riadok R tuple, cena skúmaného S indexu je okolo 1.2 pre hash index, 2-4 pre B+ strom. Cena potom nájdených S riadkov zaleží na klastrovaní. Klastrovaný index: 1 I/O (typical), neklastrovaný: viac ako 1
I/O pre zodpovedajúce S riadky.
foreach tuple r in R doforeach tuple s in S where ri == sj do
add <r, s> to result
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 20
Príklady vnorených indexov Hash-index (Alt. 2) on sid of Sailors (as inner):
Scan Reserves: 1000 page I/Os, 100*1000 tuples. For each Reserves tuple: 1.2 I/Os to get data entry in index,
plus 1 I/O to get (the exactly one) matching Sailors tuple. Total: 220,000 I/Os.
Hash-index (Alt. 2) on sid of Reserves (as inner): Scan Sailors: 500 page I/Os, 80*500 tuples. For each Sailors tuple: 1.2 I/Os to find index page with
data entries, plus cost of retrieving matching Reserves tuples. Assuming uniform distribution, 2.5 reservations per sailor (100,000 / 40,000). Cost of retrieving them is 1 or 2.5 I/Os depending on whether the index is clustered.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 21
Blokové vnorené joiny Použijeme jednu stránku ako vstupný bufer na skenovanie
vnútorného S, jednu stránku ako výstupný bufer, a ostatne stránky na blok vonkajšieho R Pre každú zodpovedajúce riadky r v R-blocku, s v S-stranke pridáme <r,s> do
výsledku. Potom prečítame ďalší R-block, prečítame S, atď. F
. . .. . .
R & SHash table for block of R
(k < B-1 pages)
Input buffer for S Output buffer
. . .
Join Result
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 22
Príklady blokových vnorených cyklov Cena: Scan of outer + #outer blocks * scan of inner
počet vonkajších blokov = počet vonkalších/veľkosť bloku S Reserves (R) ak vonkajší, a 100 stránok z R:
Cena skenovania R je 1000 I/Os; celkovo 10 blokov. Na jeden blok R, skenujeme Sailors (S); 10*500 I/Os. Ak je miesto len pre 90 stránok z R, budeme skenovat S 12 krát.
So 100-stránkovým blokom z Sailors ak vonkajšok: Cena skenovania S je 500 I/Os; celkový počet 5 blokov.
Na jeden blok S, skenujeme Reserves; 5*1000 I/Os. Ak berieme do úvahy sekvenčné čítanie sa analýza mení:
najlepšie je rozdelit bufre rovnomerne medzi R a S
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 23
Sort-Merge Join (R S) Usporiadať R a S na joinovanom stĺpci,potom ich
oskenovať a spravit merge a dať na výstup riadky Advance scan of R until current R-tuple >= current S tuple,
then advance scan of S until current S-tuple >= current R tuple; do this until current R tuple = current S tuple.
At this point, all R tuples with same value in Ri (current R group) and all S tuples with same value in Sj (current S group) match; output <r, s> for all pairs of such tuples.
Potom pokračujeme skenovaním R a S R je skenované raz;každá skupin S je skenovaná raz
pri vyhovujúcom riadku.
i=j
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 24
Príklad Sort-Merge Join
Cena: M log M + N log N + (M+N) Cena skenovania, M+N, može byť M*N (veľmi nežiadané!)
S 35, 100 alebo 300 stránkami bufra, obe Reserves a Sailors môžu býť usortené v dvoch prechodoch, celková cena joinu:7500.
sid sname rating age22 dustin 7 45.028 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0
sid bid day rname28 103 12/4/96 guppy28 103 11/3/96 yuppy31 101 10/10/96 dustin31 102 10/12/96 lubber31 101 10/11/96 lubber58 103 11/12/96 dustin
(BNL cost: 2500 to 15000 I/Os)
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 25
Zdokonalenie Sort-Merge Joinu Môžeme kombinovať mergovacie fázi v triedení R a S s
mergovaním potrebním pre join S B> , kde L je veľkosť väčšej relácie, použitím vylepšenia
triedenia ktore produkuje veľkost 2B v Pass 0, počet prebehnutí relácie je <B/2
Alokovat 1 stránku počas každého prechodu relácie a spraviť merge počas kontroli joinovacej podmienky
Cena: čítanie+zápis každej relácii v Pass 0 + čítanie každej relácii v mergovacom prchode(+ vý pis výsledných riadkov).
V príklade, cena ide dole z 7500 na 4500 I/Os. V praxi, cena sort-marge joinu ako cena externeho
triedenia je lineárna.
L
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 26
Hash-Join Particia oboch
relácií používa ako hash funkciu h: Riadky R v particii I budu priradené riadkom S v particii I.
Čítať v particii R, použiť hash funkciu h2 rôznu od h. Zoskenovať výsledky S, vyhľadať zhody
Partitionsof R & S
Input bufferfor Si
Hash table for partitionRi (k < B-1 pages)
B main memory buffersDisk
Output buffer
Disk
Join Result
hashfnh2
h2
B main memory buffers DiskDisk
Original Relation OUTPUT
2INPUT
1
hashfunctionh B-1
Partitions
1
2
B-1
. . .
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 27
Pozorovania Hash-Join
počet particií k <B-1 (prečo?), a B-2 > veľkosť najväčšej particie vykonávaná v pamäti. Za predpokladu rovnomerne veľkých particií a maximálnom k, dostaneme k= B-1, a M/(B-1) < B-2, tj., B musí byť >
Ak využijeme v pamäti vstavanú hash tabuľku na zrýchlenie priraďovania riadkov, je potrebné využiť viac pamäte
Ak hash funkcia nevytvára particie rovnomerne, jedna alebo viac R particií sa nezmestí do pamäte. Môžeme využiť hash-join techniku rekurzivne na vytvorenie joinu R particie s korešpondujúcou S particiou
M
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 28
Cena Hash-Join
Vo fáze delenia, čítanie +zápis obe relácie; 2(M+N). V priraďovacej fáze, čítanie obe relácie; M+N I/Os. V našom príklade je to spolu 4500 I/Os. Sort-Merge Join vs. Hash Join:
Ak je dané minimum pamäte , obe majú cenu 3(M+N) I/Os. Hash Join je dokonalejší v tom to prípade ak sa veľkosť relácie značne líši.
Sort-Merge menej citlivý na šikmé dáta; výsledok je usporiadaný
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 29
Všebecne podmienky pre Join Rovnosti pre viac atribútov(napr., R.sid=S.sid AND
R.rname=S.sname): Pre Index NL, vstavaný index na <sid, sname> (ak S je vnútorní);
alebo použijeme existujúce indexi na sid alebo sname. Pre Sort-Merge a Hash Join, triedenie/particia na kombinácii
dvoch joinovaných stĺpcoch. Nerovnostné podmienky (napr., R.rname < S.sname):
Pre Index NL, potrebujeme (klastrovaný!) B+ tree index. Hash Join, Sort Merge Join neaplikovateľné. Block NL zrejme najvhodnejšia join metoda.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 30
Množinové operácie
prienik a karteziánsky súčin . Union (Distinct) a Except sú podobné; spravíme Union. Triediaci prístup pre union
Utriediť obe relácie. Prejst utriedené relácie a mergovat ich Alternatíva: Zmergovať prechodi z Pass 0 pre obe relácie.
Prístup založený na hash pre union: Particie R a S používaju hashovaciu funkciu h. Pre každú S-partíciu, vytvoriť v pamäti hash tabuľku(použitím
h2), zoskenovať R-partíciu a pridať riadky do tabuľky bez duplikátov
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 31
Agregačné operácie(AVG, MIN, atď.) Bez zoskupovania:
Vo všeobecnosti vyžaduju zoskenovanie relácie Ak je daný index, ktorého kľuč obsahuje všetky atributy v SELECTe
alebo WHERE končtrukcii, môžeme robiť len index-only sken Zo zoskupovaním:
Usporiadať group-by atribúty, potom zoskenovať reláciu a vyšetriť agregácie pre každú skupinu (Može byť vylepšené tým, že kombinujeme triedeni a vykonávanie agregácií)
Podobný prístup na základe hashingu na group-by atribútoch Pridaním tree indexu, ktorého vyhľadávací kľúč zahŕňa všetky atribúty
v SELECT, WHERE a GROUP-BY klauzulách, môžeme robit index-only sken; ak group-by atribúty vytváraju prefix vyhľadávacieho kľúča môžeme dostat listové dáta/riadky v group-by poradí.