Query-verwerking en optimalisatie - KU...

77
Gegevensbanken 2010 Query-verwerking en optimalisatie Bettina Berendt www.cs.kuleuven.be/~berendt

Transcript of Query-verwerking en optimalisatie - KU...

Page 1: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

Gegevensbanken 2010

Query-verwerking en optimalisatie

Bettina Berendtwww.cs.kuleuven.be/~berendt

Page 2: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

2

Query-verwerking en optimalisatie:

Motivatie & Samenvatting

Page 3: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

3

indexing II and higher-dimensional structures

Waar zijn we?LesNr. wie wat

1 ED intro, ER2 ED EER3 ED relational model4 ED mapping EER2relational5 KV relational algebra, relational calculus6 KV SQL7 KV vervolg SQL8 KV demo Access, QBE, JDBC

9 KVfunctional dependencies and normalisation

10 KVfunctional dependencies and normalisation

11 BB file structures and hashing12 BB indexing I

13 BB14 BB query processing15 BB transactions16 BB query security17 BB Data warehousing and mining18 ED XML, oodb, multimedia db

Fysisch model / vragen

Page 4: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

4

A. Wat is slimmer?

SELECT empname, projectname FROM emp, projectWHERE emp.SSN = project.leaderSSNAND emp.income > 1000000

emp project

X

σ emp.SSN = project.leader.SSN

π emp.empname, project.projectname

σ emp.income > 1000000

join emp.SSN = project.leaderSSN

emp

σ emp.income > 1000000

project

π emp.empname, project.projectname

Page 5: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

5

B. Wat helpt daarbij?

join emp.SSN = project.leaderSSN

emp

σ emp.income > 1000000

project

π emp.empname, project.projectname

Page 6: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

6

C. Waar moeten we op letten?

join emp.SSN = project.leaderSSN

emp

σ emp.income > 1000000

project

π emp.empname, project.projectname blokkentransport !

Page 7: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

7

Agenda

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Page 8: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

8

Agenda

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Page 9: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

9

Overzicht van queryverwerking

Stappen in verwerking v. query: • lezen en ontleden van query

– scanner: zet string om in tokens

– parser: controleertsyntactische correctheid en bouwt interne structuur op die query voorstelt

• query optimalisatie– vaak meerdere uitvoerings-

strategieën mogelijk– meest efficiënte uitkiezen

• codegeneratie– resultaat is uitvoerbare code

• uitvoeren van de query

Page 10: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

10

Query-optimalisatie

– Beste strategie vinden is moeilijk en duur→ in de praktijk: bepalen van een redelijk efficiënte strategie

• Netwerk model, hiërarchisch model, objectmodel:– uitvoeringsstrategie grotendeels vastgelegd in het programma

(navigatie )→ weinig optimalisatiemogelijkheden

• Relationeel model, objectrelationeel model:– hoog-niveau vraagtaal (SQL, OQL)– uitvoeringsstrategie niet vastgelegd in de query– nood aan optimalistaie door DBMS

Page 11: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

11

• optimalisatie = "kost" zo laag mogelijk houden– belangrijkste kost is meestal uitvoeringstijd– technieken voor optimalisatie:

• heuristische regels voor ordenen van de bewerkingen in een query uitvoeringsstrategie

– regels die in het algemeen goed werken• systematische schatting van kosten van verschillende

uitvoeringsstrategieën, en kiezen van strategie met laagste kost– berekening van bv. tijd nodig voor join op basis van aantal

tupels, indexen, ...

Page 12: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

12

Agenda

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Page 13: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

13

Omzetting SQL → relationele algebra

• SQL is gemakkelijk om te vormen naar relationele algebra– verschil: in SQL ligt volgorde van bewerkingen minder vast– relationele algebra uitdrukkingen zijn dus meer geschikt om

uitvoeringsstrategie te bepalen

Page 14: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

14

Voorbeeld van conversie

SELECT Lname, FnameFROM EMPLOYEEWHERE Salary >(SELECT MAX(Salary)

FROM EMPLOYEEWHERE Dno = 5 );

SELECT Lname, FnameFROM EMPLOYEEWHERE Salary >(SELECT MAX(Salary)

FROM EMPLOYEEWHERE Dno = 5 );

c := F MAX Salary(σ Dno = 5(EMPLOYEE))πLname, Fname(σ Salary > c(EMPLOYEE))

c := F MAX Salary(σ Dno = 5(EMPLOYEE))πLname, Fname(σ Salary > c(EMPLOYEE))

Page 15: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

15

Implementatie van operaties uit de relationele algebra

• Belangrijke hulp-procedure: sorteren– veel gebruikt voor efficiënte implementaties van andere

operaties• Selectie• Join• Projectie• ...

Page 16: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

16

Sorteren

• Belangrijke component bij query-optimalisatie is sorteren– niet alleen om gesorteerd resultaat te bekomen (order by...)– maar ook als hulpoperatie voor andere bewerkingen

• Sorteren van informatie in externe files: "merge-sort"– strategie: korte gesorteerde lijsten samenvoegen tot een lange

gesorteerde lijst– "lijsten" zijn bestanden op schijf

Page 17: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

17

• Fase 1: – lees een deel van het bestand in buffer– sorteer records in buffer (m.b.v. intern sorteeralgoritme, bv.

Quicksort)– schrijf gesorteerde buffer naar schijf als tijdelijk bestand– herhaal tot hele bestand overlopen is

• Fase 2:– meng n tijdelijke bestanden tot een gesorteerd tijdelijk bestand– herhaal tot er maar één gesorteerd bestand meer is

Page 18: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

18

a e c i o x y u n p e h b q t z i d f n s k x i p w j q n e r h c p k

r h c p k p w j q n ef n s k x ib q t z i dy u n p e ha e c i o x

c h k p r e j n p q wf i k n s xb d i q t ze h n p u ya c e i o x

a b c d e e h i i n o p q t u x y z c e f h i j k k n n p p q r s w x

a b c c d e e e f h i i i j ...

splits

sorteer

meng

meng

buffer (tijdelijk) bestand

Page 19: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

19

Page 20: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

20

Complexiteit - sorteerfase

• zoveel mogelijk blokken worden samen in het geheugen gelezenen gesorteerd, d.i. afhankelijk van de beschikbare buffer ruimte

• met:– b blokken– nB beschikbare buffers

• dan:– nR = ⎡ b / nB ⎤ “runs” nodig– elke “run” geeft een gesorteerd deelbestand

• elk blok wordt een keer ingelezen en een keer geschreven:voor b blokken: 2 * b

• voorbeeld:– nB = 5 b = 1024– dan: nR = ⎡ 1024 / 5 ⎤ = 205⇒ 205 gesorteerde deelbestanden

Page 21: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

21

Complexiteit:Mengfase, totaal

• mengfase:• mengingsgraad dM:

– aantal deelbestanden die ineens gemengd kunnen worden= aantal beschikbare buffers – 1 = nB – 1

– aantal doorgangen (“passes”): ⎡ logdM (nR) ⎤– voorbeeld:

• dM = 4• aantal gesorteerde deelbestanden:

205 → 52 → 13 → 4 → 1 – complexiteit:

2 * b * ( logdM nR )

• totale complexiteit2 * b + 2 * b * ( logdM nR )

in1 uitin3in2 buffer

Page 22: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

22

Selectie

• Verschillende strategieën mogelijk, naargelang van– soort selectiecriterium– bestaan van indexen

• Voorbeelden criteria:– OP1: σ Ssn = ‘123456789’ (EMPLOYEE)– OP2: σ Dnumber > 5 (DEPARTMENT)– OP3: σ Dno = 5 (EMPLOYEE)– OP4: σ Dno = 5 AND Salary > 3000 AND Sex = ‘F’ (EMPLOYEE)– OP5: σ Essn = ‘123456789’ AND Pno = 10 (WORKS_ON)

Page 23: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

23

Strategieën:• S1: lineair zoeken

– doorloop hele bestand, test voor elk record of het voldoet• S2: binair zoeken

– mogelijk voor "="-conditie op sleutelattribuut dat ordeningbepaalt

• vb: OP1: σ Ssn = ‘123456789’ (EMPLOYEE)– als SSN een ordeningsattribuut is

• S3: gebruik van primaire index of hash functie om één record op te halen– mogelijk voor = op geïndexeerd / gehasht attribuut

• vb: OP1: σ Ssn = ‘123456789’ (EMPLOYEE)

Page 24: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

24

• S4: gebruik van primaire index om meerdere records op tehalen– werkt ook voor ongelijkheden (<, ...) (zg. "range queries")

• vb: OP2: σ Dnumber > 5 (DEPARTMENT)

• S5: gebruik van een cluster-index om meerdere records op te halen– =, <, ... op niet-sleutel-attribuut dat ordening bepaalt

• vb: OP3: σ Dno = 5 (EMPLOYEE)

• S6: gebruik van secundaire index (B+ boom)– mogelijk voor zowel = als <, ...– resultaat: een (bij = zoeken op sleutel) of meerdere records

Page 25: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

25

• S7: conjunctieve selectie (c1 AND c2 AND ...)– als voor een van de subcondities een van de methodes S2 - S6

bruikbaar is:• selecteer eerst volgens die subconditie• test voor elk gevonden record de andere subconditie(s)• vb: OP4: σ Dno = 5 AND Salary > 3000 AND Sex = ‘F’ (EMPLOYEE)

• S8: conjunctieve selectie met samengestelde index– mogelijk indien

• "="-subcondities op meerdere attributenen• er bestaat een samengestelde index op die attributen• vb: OP5: σ Essn = ‘123456789’ AND Pno = 10 (WORKS_ON)

– als gecombineerde index (Essn, Pno) op WORKS_ON bestaat

Page 26: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

26

• S9: conjunctieve selectie door intersectie van recordpointers– mogelijk met secundaire indexen die recordwijzers (geen

blokwijzers) bevatten• voor elke "="-conditie op secundair geïndexeerd attribuut:

– haal verzameling recordpointers uit index op• bereken doorsnede van al die verzamelingen• haal uiteindelijk records op en filter volgens overblijvende condities

– voordeel: • voor groot deel van selectiewerk moeten enkel indexen

geraadpleegd worden

Page 27: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

27

optimalisatie van selectie

• selectie met enkelvoudige voorwaarde:– indien index beschikbaar of bestand geordend: S2 – S6– anders lineair zoeken

• selectie met conjunctieve voorwaarde (eist S7 – S9):– indien meerdere toegangspaden beschikbaar:

• meest selectieve selectie eerst uitvoeren– rc = aantal records dat aan voorwaarde voldoet– r = totaal aantal records– selectiviteit = rc / r

• zo laag mogelijk• schattingen van selectiviteit uit catalogus te halen

Page 28: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

28

• selectie met disjunctieve voorwaarde• vb: OP4’: σ Dno = 5 OR Salary > 3000 OR Sex = ‘F’ (EMPLOYEE)

– moeilijk te optimaliseren: • elke deelvoorwaarde volledig te testen

– indien voor elke deelvoorwaarde efficiënte toegangspadenbestaan :

• gebruik die– zodra voor een deelvoorwaarde geen toegangspad bestaat:

• lineair zoeken nodig• gebruik van indexen voor andere criteria niet meer zinvol• → in één pas doorheen gegevensbank gaan en alles testen

Page 29: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

29

Join

• Dure operatie: – vraagt veel uitvoeringstijd !

• Vaak equijoin / natuurlijke join– wij bekijken hier enkel deze

• 2-weg-join (join van 2 bestanden) vs. multi-weg-join (meerdere bestanden)– wij bekijken enkel 2-weg-join:

R A = B S• Voorbeelden:

– OP6: EMPLOYEE Dno = Dnumber DEPARTMENT– OP7: DEPARTMENT Mgr_ssn = Ssn EMPLOYEE

Page 30: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

30

Implementatiemethodes voor Join

• We beschouwen joins volgens R.A = S.B• J1: geneste lussen

– voor elk record t uit R: • haal elk record s uit S op • en controleer of t [A] = s [B]

• J2: toegangsstructuur gebruiken om overeenkomstigerecords op te halen– als S geïndexeerd of gehasht op B :

• records t van R één voor één ophalen• gebruik t [A] als zoekwaarde overeenkomstige records s van S te

vinden, met s [B] = t [A]• (efficiënt)

Page 31: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

31

• J3: sort-merge join– indien R-bestand geordend is volgens A, S volgens B– join mogelijk door 1x lineair doorlopen van A en B– zeer efficiënt– ook mogelijk met secundaire indexen

• A en B kunnen in volgorde doorlopen worden dankzij index• maar records zelf verspreid in bestand → om ze op te halen

voortdurend andere blokken inlezen → kan inefficiënt worden

Page 32: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

32

Page 33: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

33

• J4: hash-join– idee:

• R.A en S.B worden beide gehasht volgend zelfde hash-functie– methode :

• maak nieuw hash bestand aan• zet alle records van kleinste relatie (bv. R) in cellen volgens

hashfunctie• voor elk record s van S:

– kijk in welke cel s hoort (volgens hashing op s[B])– zoek in die cel overeenkomstige records in R

– lineaire complexiteit → efficiënt

Page 34: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

34

optimalisatie van joins

• J1: geneste lussenwaartussen kunnen we kiezen?

– welk bestand wordt doorlopen in buitenste lus?• grootste of kleinste?

– hoe verdelen we de invoerbuffers?• een buffer voor elke bestand?• meer buffers voor bestand in buitenste cyclus?• meer buffers voor bestand in binnenste cyclus?

Page 35: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

35

EMPLOYEE

RESULTAAT

DEPARTMENT

EMPLOYEE in buitenste lus:Elk blok wordt 1 x gelezen: 2 000

DEPARTMENT in binnenste lus:elk blok wordt telkens opnieuw gelezen bij volgendeuitvoering van buitenste lus:

400 x 10 = 4 000

Totaal gelezen blokken: 6 000

bD = 10bE = 2000

Page 36: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

36

DEPARTMENT

RESULTAAT

EMPLOYEE

DEPARTMENT in buitenste lus:elk blok wordt 1 x gelezen: 10

EMPLOYEE in binnenste lus:elk blok wordt telkens opnieuw gelezen bij volgendeuitvoering van buitenste lus:

2 x 2 000 = 4 000

Totaal gelezen blokken: 4 010

bD = 10 bE = 2000

Page 37: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

37

EMPLOYEE

RESULTAAT

DEPARTMENT

EMPLOYEE in buitenste lus:elk blok wordt 1 x gelezen: 2 000

DEPARTMENT in binnenste lus:elk blok wordt telkens opnieuw gelezen bij volgendeuitvoering van buitenste lus:

2 000 x 10 = 20 000

Totaal gelezen blokken: 22 000

bD = 10bE = 2000

Ter vergelijking: slechts 1 buffer reserveren voor buitenste lus:

Page 38: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

38

DEPARTMENT

RESULTAAT

EMPLOYEE

DEPARTMENT in buitenste lus:elk blok wordt 1 x gelezen: 10

EMPLOYEE in binnenste lus:elk blok wordt telkens opnieuw gelezen bij volgendeuitvoering van buitenste lus:

10 x 2 000 = 20 000

Totaal gelezen blokken: 20 010

bD = 10 bE = 2000

Page 39: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

39

optimalisatie van joins

• J1: geneste lussen– kies voor buitenste lus bestand met minst blokken (bv. R)– reserveer

• 1 buffer voor bestand S in binnenste lus, • 1 voor uitvoerbestand, • zoveel mogelijk buffers voor bestand in buitenste lus

– indien plaats voor nB buffers: nB - 2 buffers voor R– per record van S :

• vergelijk met alle R-records in buffers ("probing" van de buffers)⇒ S moet in totaal even vaak overlopen worden als het aantal

keren dat de buffers met nieuwe waarden voor R geladenworden

Page 40: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

40

Voorbeeld (5): de diagrammen als formules

• vb. join op EMPLOYEE en DEPARTMENT:OP6: EMPLOYEE Dno = Dnumber DEPARTMENT– EMPLOYEE bevat bE blokken, DEPARTMENT bD

– kiezen we EMPLOYEE voor buitenste lus:• aantal keren dat nB-2 blokken geladen worden van EMPLOYEE: ⎡bE / (nB-2) ⎤

• DEPARTMENT evenveel keren helemaal inlezen → in totaalbD * ⎡ bE/(nB-2) ⎤ blokken te lezen

• totaal aantal blokken te lezen (EMPLOYEE en DEPARTMENT samen): bE + bD* ⎡ bE/(nB-2) ⎤

• bv. bE = 2 000, bD = 10, nB = 7 : 6 000 blokken

– kiezen we DEPARTMENT in buitenste lus:• bD + bE* ⎡ bD/(nB-2) ⎤ = 4 010 blokken

Page 41: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

41

• J2: toegangsstructuur gebruiken om overeenkomstigerecords op te halen– indien secundaire indexen bestaan op beide bestanden:OP7: DEPARTMENT Mgr_ssn = Ssn EMPLOYEE – join-selectiefactor van R m.b.t. R.A = S.B :

• hoeveel records van S gemiddeld overeenkomen met een record van R (bij join op R.A = S.B)

• vb: – # ( EMPLOYEE ) = 5 000– # ( DEPARTMENT ) = 50– join-selectiefactor van EMPLOYEE : 1 / 100– join-selectiefacor van DEPARTMENT : 1

– bestand met hoge join-selectiefactor in buitenste lus• vermijdt dat veel "onnodige" records opgezocht worden

Page 42: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

42

• vb.: – voor 50 departementen, 5 000 werknemers,

bD=10, bE = 2 000• elk departement heeft een manager → JSFD=1• maar 50 van de 5 000 werknemers managen een departement →

JSFE = 0.01

• zij aantal niveaus in indexen: xSsn = 4, xMgr_ssn = 2

• met EMPLOYEE in buitenste lus:– bE + (rE * (xMgr_ssn + 1) ) = 17 000 blokken

• met DEPARTMENT in buitenste lus:– bD + (rD * (xSsn + 1) ) = 260 blokken

Page 43: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

43

• J3: sort-merge join– is efficiënt

• vb: zowel OP6 als OP7– OP6: EMPLOYEE Dno = Dnumber DEPARTMENT– OP7: DEPARTMENT Mgr_ssn = Ssn EMPLOYEE

vereisen– bE + bD

bloktoegangen– O (bR + bS), maar bestanden moeten geordend zijn– indien niet: eventueel eerst sorteren

• externe sorteermethode toepassen• totale complexiteit: O(bR+ bS+ bR . log bR + bE . log bE)• kan efficiënter zijn dan vorige methodes

Page 44: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

44

• J4: hash-join – eenvoudigst indien volledige hashtabel van een van de twee

bestanden in intern geheugen past• stap 1: eerste bestand in geheugen brengen → tabel• stap 2: voor elk record van 2-de bestand nagaan met welke plaats

in die tabel het overeenstemt

– Indien niet: meer gesofisticeerde implementaties• partition hash join:

– eerst bestanden partitioneren met hash-functie h• verz. kleinere bestanden die volledig in intern geheugen

passen– dan die bestanden 2 aan 2 joinen (met eender welke join-

methode, evt. J4 met andere hashfunctie)– tenslotte alle gejoinde bestanden aan elkaar hangen

Page 45: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

45

R

S

1 32 4

1 432

1 432

alle records r van R met h(r.A)=4

alle records s van S met h(s.B)=4

hash

hash

Page 46: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

46

– hybrid hash join:• variant van partition hash join• idee: deel van join-fase tijdens partitie-fase al uitvoeren• één van de tijdelijke hash-bestanden blijft permanent in geheugen• spaart 2 tijdelijke bestanden uit

Page 47: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

47

Projectie

• π attribuutlijst(R)Als attribuutlijst

– een sleutel van R bevat:• resultaat bevat evenveel tupels als R

– geen sleutel van R bevat:• resultaat kan dubbels bevatten

• verwijderen : door sorteren of door hashing– na sorteren:

dubbels komen na elkaar → gewoon niet kopiëren naarresultaat

– hashing: tijdens projectie kijken of tupel al voorkomt in resultaat (via hashtabel); indien ja, niet toevoegen

Page 48: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

48

Page 49: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

49

Verzameling-operaties

• Carthesisch product R x S:• zeer duur, resulteert in zeer grote relatie• zoveel mogelijk vermijden of vervangen door equivalente operaties

tijdens optimalisatie

• Unie, doorsnede, verschil:• alleen voor unie-compatibele relaties (zelfde attributen)

– implementeren met sorteren of hashing• sorteren:

– sorteer beide bestanden volgens zelfde attributen– daarna 1x lineair beide bestanden doorlopen

• hashing:– records in beide bestanden naar zelfde hash-cellen hashen

Page 50: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

50

T ← R ∪ S

T ← R ∩ S

T ← R \ S

Page 51: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

51

Aggregatie-operaties

• Indien dichte index op attribuut bestaat: resultaat kan zuiveruit index berekend worden– vb:

SELECT MAX ( Salary )FROM EMPLOYEE ;

– min:• volg steeds meest linkse wijzer in B+ - boom

– max: • steeds meest rechtse

– avg, count, sum: • doorloop bladeren van boom

Page 52: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

52

Aggregatie-operaties

• Group by:– vb:

SELECTDNO, AVG ( Salary )FROM EMPLOYEEGROUP BY DNO ;

– bestand eerst partitioneren in juiste groepen• d.m.v. sorteren of hashen

– aggregaatfunctie voor elke groep apart uitrekenen

– opmerking: • bij cluster-index: bestand is reeds gepartitioneerd volgens cluster-

attribuut

Page 53: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

53

Outer join

• bv. left outer join– Wijziging aan standaard join implementatie: (bv. J1)

• elk tupel van linker-relatie komt in resultaat voor• dus deze relatie gebruiken voor buitenste lus

– Alternatief: • eerst inner join berekenen• resultaat aanvullen met tupels die niet in inner join voorkomen (elk

tupel aangevuld met nulls)

– bv. EMPLOYEE Ssn = Mgr_ssn DEPARTMENT

Page 54: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

54

Operaties combineren met pijplijnen

• probleem:– 1 query → meerdere operaties– voor elke opeenvolgende operatie apart tijdelijke bestanden

aanmaken: duur!• oplossing:

– ⇒ meerdere operaties in één algoritme combineren• bv. selectie, dan join, tenslotte projectie• resultaat van selectie niet naar tijdelijk bestand schrijven maar

direct als invoer aan join geven– pijplijn: gegevens stromen van een algoritme naar een ander

Page 55: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

55

Agenda

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Page 56: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

56

Herhaling: A. Wat is slimmer?

SELECT empname, projectname FROM emp, projectWHERE emp.SSN = project.leaderSSNAND emp.income > 1000000

emp project

X

σ emp.SSN = project.leader.SSN

π emp.empname, project.projectname

σ emp.income > 1000000

join emp.SSN = project.leaderSSN

emp

σ emp.income > 1000000

project

π emp.empname, project.projectname

Page 57: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

57

Heuristische optimalisatie

• Gebaseerd op "query trees"– een query-boom = een uitdrukking in relationele algebra

• blad ↔ relatie• interne knoop ↔ operatie• bevat informatie over volgorde

– verschillende querybomen kunnen equivalent zijn m.b.t. resultaat (commutativiteit van operaties, ...)

– vb: Q_2:• for every project located at ‘Stafford’, list the project number, the

controlling department number, and the department manager’s last name, address, and birthdate

• π Pnumber, Dnum, Lname, Address, Bdate ( ( ( σ Plocation = ‘Stafford’ ( PROJECT ) )

Dnum = Dnumber ( DEPARTMENT ) ) Mgr_ssn = Ssn ( EMPLOYEE ) )• SELECT P.Pnumber, P.Dnum, E.Lname, E.Address, E.Bdate

FROM PROJECT AS P, DEPARTMENT AS D, EMPLOYEE AS EWHERE P.Dnum = D.Dnumber AND D.Mgrssn = E.Ssn AND

P.Location = ‘Stafford’ ;

Page 58: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

58

canonieke vorm:- geen joins, wel carth. prod- bovenaan:

- σ- π

Page 59: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

59

Query-grafen

• andere grafische voorstelling van query• geven geen volgorde aan• daardoor minder geschikt voor optimalisatie

Page 60: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

60

• optimalisatie van queries op basis van bomen:– bouw een eerste boom in canonieke vorm:

• σ, π, × (geen joins)– herstructureer boom zonder equivalentie te verliezen

• bv. twee opeenvolgende selecties omwisselen• op basis van heuristieken, zo dat query efficiënt uitgevoerd zal

worden– vb.:

– Find the last names of employees born after 1957 who work on a project named ‘Aquarius’

– SELECT LnamrFROM EMPLOYEE, WORKS_ON, PROJECTWHERE PName = ‘Aquarius’ AND PNumber = PnoAND

Essn = Ssn AND Bdate > ‘1957-12-31’ ;

Page 61: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

61

Initiële boom

Page 62: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

62

Verplaatsselectie operatiesnaar beneden

Page 63: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

63

Plaats meest restrictieveselectie operaties eerst

Vervang carth. product doorselectie en join operaties

Page 64: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

64

Verplaatsprojecties naarbeneden

Page 65: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

65

Algemene transformatieregels

– σ -cascade • selectie op conjunctie van condities omzetten in opeenvolgende

eenvoudige selecties• σ c1 AND c2 AND … AND cn ( R ) ≡ σ c1 (σ c2 ( … (σ cn ( R ) ) … ) )

– commutativiteit van σ• σ c1 (σ c2 ( R ) ) ≡ σ c2 (σ c1 ( R ) )

– π -cascade • enkel laatste projectie overhouden• π list1 (π list2 ( … (π listn ( R ) ) … ) ) ≡ π list1 ( R )

– commutativiteit (onder voorwaarden) van σ met π• indien het selectiecriterium c enkel slaat op attributen A1, …, An

uit de projectielijst• π A1, A2, …, An (σ c ( R ) ) ≡ σ c ( π A1, A2, …, An ( R ) )

Page 66: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

66

– commutativiteit van (of × )• R c S ≡ S c R

– commutativiteit van σ met (of × )• σc (R S) = σc (R) S

– indien enkel c enkel slaat op attributen van R• σc (R S) = σ c1(R) σ c2(S)

– indien• c = c1 AND c2 , en • c1 en c2 condities zijn die enkel slaan op attributen van R

resp. S)– commutativiteit van π met ( of × )

• indien alle join-attributen in projectielijst voorkomen: projectie kannaar binnen geschoven worden

• anders: R en S projecteren op join-attributen + attributen in projectielijst

• op het einde nogmaals projecteren op gevraagde attributen• bv. π A (R B=C S) = π A(π A,B (R) B = C π A,C (S))

Page 67: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

67

– commutativiteit van verzameling-operaties• ∩ ∪ commuteren, \ niet

– associativiteit van ∩, ∪, en ×– commutativiteit van σ met verzameling-operaties– commutativiteit van π met verzameling-operaties– diverse andere transformaties

• bv. logische wetten van De Morgan

Page 68: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

68

Heuristieken: algemeen

• methode van optimalisatie: – bladeren en knopen van boom herschikken zodat query

efficiënter wordt• naar beneden schuiven van operaties die best eerst uitgevoerd

worden

• algemene regel: – voer eerst die bewerkingen uit die de grootte van tijdelijke

relaties verminderen:• selectie zo snel mogelijk (→ minder tupels)• projectie zo snel mogelijk (→ minder attributen)• ⇒ deze naar beneden schuiven in boom

Page 69: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

69

Heuristiken

• Splits complexe selectie in meerdere eenvoudige selecties– geeft meer flexibiliteit bij herschikken

• Schuif selecties zo ver mogelijk naar beneden• Schuif bladeren waarop strenge selectie gebeurt zoveel

mogelijk naar links– die geven kleinere relaties

• Vermijd zoveel mogelijk carthesische producten• Combineer carthesische producten met selectie tot een join• Schuif projecties zoveel mogelijk naar beneden

– gooi onnodige attributen direct weg• Identificeer deelbomen die door één algoritme kunnen

uitgevoerd worden (zonder creatie van tijdelijke bestanden)

Page 70: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

70

Uitvoeringsplan

• Eens query-boom geoptimaliseerd: uitvoeringsplan bouwen– welke implementaties van joins etc. gebruiken?– welke indexen gebruiken?– ...– "pipelined" vs. "materialised" evaluatie

• materialised: tussenresultaat wordt gematerialiseerd in tijdelijkbestand

• pipelined: vermijdt die tijdelijke bestanden

Page 71: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

71

SELECT Fname, Lname, AddressFROM EMPLOYEE, DEPARTMENTWHERE Dname = ‘Research’ AND Dnumber = DNO ;

Voorbeeld van uitvoeringsplan voor query Q1:

Gebruik index voor selectie op DEPARTEMENT (als die bestaat)

Gebruik geneste lussen voor join,(maar buitenste lus slechts 1-maal!)doorloop daarbij volledigEMPLOYEE bestand

Doorloop resultaat van join voor projectie

Page 72: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

72

Agenda

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Page 73: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

73

Systematische optimalisatie met kostenschattingen

• Kosten om query uit te voeren:– toegang tot hulpgeheugen (#blokken te lezen / schrijven)– opslag van tijdelijke bestanden– berekeningen– gebruik van intern geheugen– communicatiekost (query en resultaten oversturen van client

naar server)• Toegang tot hulpgeheugen weegt meestal door• Voorbeelden van kostenschattingen voor selectie en join:

– zie eerder

Page 74: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

74

Agenda

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Page 75: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

75

• Gebruik van extra kennis (in de vorm van restricties) omqueries te transformeren

• bv. : – stel dat een restrictie aangeeft dat geen werknemer meer

verdient dan zijn overste; dan hoeft volgende query niet eensuitgevoerd te worden:

SELECT E.Lname, M.LnameFROM EMPLOYEE AS E, EMPLOYEE AS MWHERE E.Super_ssn=M.Ssn

AND E.Salery>M.Salary;

SELECT E.Lname, M.LnameFROM EMPLOYEE AS E, EMPLOYEE AS MWHERE E.Super_ssn=M.Ssn

AND E.Salery>M.Salary;

Semantische query-optimalisatie

Page 76: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

76

Vooruitblijk

Overzicht

Implementatie van operaties uit relationele algebra

Heuristische optimalisatie

Systematische optimalisatie d.m.v. kostenschattingen

Semantische query-optimalisatie

Transactieverwerking

Page 77: Query-verwerking en optimalisatie - KU Leuvenpeople.cs.kuleuven.be/~bettina.berendt/teaching/2009-10... · 2010-05-10 · • J3: sort-merge join – indien R-bestand geordend is

77

Bronnen

• Deze slides zijn gebaseerd op Henk Olivié‘s slides voorGegevensbanken 2009 en op Elmasri & Navathe, Fundamentals of Database Systems, Addison Wesley / Pearson, 5e editie 2007.

• Alle kopieën zonder bronspecificatie: Elmasri & Navathe, Fundamentals of Database Systems, Addison Wesley / Pearson, 5e editie 2007.

• Verdere figuren: bronnen zie “Powerpoint comments field”• Bedankt iedereen!