Query-verwerking en optimalisatie



Vergelijkbare documenten
Gegevensbanken Indexstructuren. Bettina Berendt

TI2505/TI2500 Informatie- en Datamodellering

TI2500 Informatie en Datamodellering

Organisatie van meerdimensionale structuren

TU Delft TENTAMEN DATABASES. Opgaven IN2105/IN oktober uur. Er zijn 6 opgaven. maximale score 100 punten

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Begrippen van transactieverwerking

Introductie (relationele) databases

IN2105/IN2410 Databases

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Anatomie van een databank

Advanced Databases Topic 2: query processing aspects query optimisation. Query optimisation. Van SQL naar XRA. Algebraïsche herschrijving

Data Manipulatie. Query Talen. / Informatica

ISO Query By Example

Query SQL Boekje. Fredrik Hamer

TI2500 Informatie en Datamodellering

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

Indexen.

Fundamenten van geheugen; Bestandsorganisatie; Hashing

Datamodelleren en databases 2011

TI2500 Informatie en Datamodellering

de praktijk: tabellen

SQL: query taal met. woorden. ISO SQL: Structured Query Language. de SQL basis query structuur. voorbeeld: doel: intuitieve query taal

EXAMEN juni 2016 Gegevensbanken

Structured Query Language (SQL)

ISO SQL: Structured Query Language

Relationele Databases 2002/2003

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

Relationele Databases 2002/2003

Les 2 Eenvoudige queries

OFFICE A LA CARTE - ACCESS 2013

1. * Database worden vaak gebruikt in Client-Server architectuur.

Dataconversie met Oracle Spatial

Zelftest SQL Workshop

Programmeren in C++ Efficiënte zoekfunctie in een boek

DATABASEBEHEER IN EXCEL

6.8 Lijsten: oefeningen

1. Databanken. Wat is een databank? Verschillende opslagmethodes

[TOETS SQL INLEIDING]

Data Manipulation Language

SQL opgaven. Relationele model: Opgaven:

11. Het selecteren van gegevens deel II

12. Meer dan één tabel gebruiken en sub-queries

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober A. Snippe ICT Lyceum 1

Les S-02: Meer geavanceerde SQL-instructies

Technische nota AbiFire Rapporten maken via ODBC

Data Warehouse Script Generator Doel

NHibernate als ORM oplossing

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

Informatie & Databases

Technische nota AbiFire5 Rapporten maken via ODBC

SQL en XML. XML schema s & DMO. Entiteitsklasse en attribuut. SQL en XML. Datamodellering Schema een ruim begrip (zie Møller, p.

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64

1. Inleiding Inleiding SQL Inleiding Database, databaseserver en databasetaal Het relationele model...

Een introductie tot gegevensbanken

SQL & Datamodelleren

Tentamen Informatica 6, 2IJ60,

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Les S-01: De basisbeginselen van SQL

Functional Design Loading KPI s in DM Datamart Enterprise xxx. Programname: M_DM_KPI. Historie. Versie. Auteur(s)

Hoofdstuk 13: Sorteren & Filteren* 2010

Databases (INFODB) 20 april 2010

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

TU Delft TENTAMEN DATABASES. Opgaven IN2105/IN januari uur. Er zijn 6 opgaven. maximale score 100 punten

Aan de slag met AdminView

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.

Tentamen Databases voor ica

Zelftest SQL Workshop

Automating Complex Workflows using Processing Modeler

S VERZENDEN MET AFDRUK SAMENVOEGEN

8.8 Records selecteren

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Tentamen Databases voor iku

Sorteren, groeperen en totaliseren

Computerclub Volwassenen, Jeugd en Informatica vzw

Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid.

Mapsource. handleiding Mapsource vs

7. Het selecteren van gegevens

3. Structuren in de taal

Sparse columns in SQL server 2008

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument

oefeningen TOP2000 antwoorden

Miniles gegevensbanken bevragen met SQL

Examen Algoritmen en Datastructuren III

Trainingsomschrijving ACCESS 97 / 2000 / 2003NL

Greedy algoritmes. Algoritmiek

SQL / Systeemanalyse

DB architectuur.

Database tuning in een notendop

Processoren. Marc Seutter & David N. Jansen 12 November 2013

SQL & Relationele datamodellen in interactieve media

DataFlex 19.0 SQL Server

AFO 142 Titel Aanwinsten Geschiedenis

7.8 Lijsten oefeningen

Databases - Inleiding

DBMS SQL. Relationele databases. Sleutels. DataBase Management System. Inleiding relationele databases. bestaan uit tabellen.

AAN DE SLAG MET QDAC VOLLEDIG

De keuzestructuur. Versie DD

Verzamelingen deel 3. Derde college

Structured Query Language

Transcriptie:

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

Query-verwerking en optimalisatie: Motivatie & Samenvatting 2

Waar zijn we? Les Nr. wie wat 1 ED intro, ER 2 ED EER 3 ED relational model 4 ED mapping EER2relational 5 KV relational algebra, relational calculus 6 KV SQL 7 KV vervolg SQL 8 KV demo Access, QBE, JDBC functional dependencies and 9 KV normalisation 10 KV functional dependencies and normalisation 11 BB file structures and hashing 12 BB indexing I 13 BB indexing II and higher-dimensional structures 14 BB query processing 15 BB transactions 16 BB query security 17 BB Data warehousing and mining 18 ED XML, oodb, multimedia db Fysisch model / vragen 3

A. Wat is slimmer? SELECT empname, projectname FROM emp, project WHERE emp.ssn = project.leaderssn AND emp.income > 1000000 π emp.empname, project.projectname σ emp.income > 1000000 σ emp.ssn = project.leader.ssn X π emp.empname, project.projectname join emp.ssn = project.leaderssn σ emp.income > 1000000 emp project emp project 4

B. Wat helpt daarbij? π emp.empname, project.projectname join emp.ssn = project.leaderssn σ emp.income > 1000000 emp project 5

C. Waar moeten we op letten? π emp.empname, project.projectname blokkentransport! join emp.ssn = project.leaderssn σ emp.income > 1000000 emp project 6

Agenda Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie 7

Agenda Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie 8

Overzicht van queryverwerking Stappen in verwerking v. query: lezen en ontleden van query scanner: zet string om in tokens parser: controleert syntactische correctheid en bouwt interne structuur op die query voorstelt query optimalisatie vaak meerdere uitvoeringsstrategieën mogelijk meest efficiënte uitkiezen codegeneratie resultaat is uitvoerbare code uitvoeren van de query 9

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 10

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

Agenda Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie 12

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 13

Voorbeeld van conversie SELECT SELECT Lname, Lname, Fname Fname FROM FROM EMPLOYEE EMPLOYEE WHERE WHERE Salary Salary >(SELECT >(SELECT MAX(Salary) MAX(Salary) FROM FROM EMPLOYEE EMPLOYEE WHERE WHERE Dno Dno = 5 ); ); c := := F MAX Salary (σ MAX Salary (σ Dno = 5 (EMPLOYEE)) Dno = 5 (EMPLOYEE)) ππ Lname, Fname (σ Lname, Fname (σ Salary > c (EMPLOYEE)) Salary > c (EMPLOYEE)) 14

Implementatie van operaties uit de relationele algebra Belangrijke hulp-procedure: sorteren veel gebruikt voor efficiënte implementaties van andere operaties Selectie Join Projectie... 15

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 16

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 17

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 splits 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 sorteer a c e i o x e h n p u y b d i q t z f i k n s x e j n p q w c h k p r meng 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 meng a b c c d e e e f h i i i j... buffer (tijdelijk) bestand 18

19

Complexiteit - sorteerfase zoveel mogelijk blokken worden samen in het geheugen gelezen en gesorteerd, d.i. afhankelijk van de beschikbare buffer ruimte met: b blokken n B beschikbare buffers dan: n R = b / n B runs nodig elke run geeft een gesorteerd deelbestand elk blok wordt een keer ingelezen en een keer geschreven: voor b blokken: 2 * b voorbeeld: n B = 5 b= 1024 dan: n R = 1024 / 5 = 205 205 gesorteerde deelbestanden 20

Complexiteit: Mengfase, totaal in1 in2 in3 uit buffer mengfase: mengingsgraad d M : aantal deelbestanden die ineens gemengd kunnen worden = aantal beschikbare buffers 1 = n B 1 aantal doorgangen ( passes ): log dm (n R ) voorbeeld: d M = 4 aantal gesorteerde deelbestanden: 205 52 13 4 1 complexiteit: 2 * b * ( log dm n R ) totale complexiteit 2 * b + 2 * b * ( log dm n R ) 21

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) 22

Strategieën: S1: lineair zoeken doorloop hele bestand, test voor elk record of het voldoet S2: binair zoeken mogelijk voor "="-conditie op sleutelattribuut dat ordening bepaalt 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) 23

S4: gebruik van primaire index om meerdere records op te halen 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 24

S7: conjunctieve selectie (c 1 AND c 2 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 attributen en 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 25

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 26

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 r c = aantal records dat aan voorwaarde voldoet r = totaal aantal records selectiviteit = r c / r zo laag mogelijk schattingen van selectiviteit uit catalogus te halen 27

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 toegangspaden bestaan : 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 28

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 29

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 overeenkomstige records 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) 30

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 31

32

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 33

optimalisatie van joins J1: geneste lussen waartussen 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? 34

b E = 2000 EMPLOYEE DEPARTMENT b D = 10 EMPLOYEE in buitenste lus: Elk blok wordt 1 x gelezen: 2 000 RESULTAAT DEPARTMENT in binnenste lus: elk blok wordt telkens opnieuw gelezen bij volgende uitvoering van buitenste lus: 400 x 10 = 4 000 Totaal gelezen blokken: 6 000 35

DEPARTMENT EMPLOYEE b D = 10 b E = 2000 DEPARTMENT in buitenste lus: elk blok wordt 1 x gelezen: 10 RESULTAAT EMPLOYEE in binnenste lus: elk blok wordt telkens opnieuw gelezen bij volgende uitvoering van buitenste lus: 2 x 2 000 = 4 000 Totaal gelezen blokken: 4 010 36

Ter vergelijking: slechts 1 buffer reserveren voor buitenste lus: b E = 2000 EMPLOYEE DEPARTMENT b D = 10 EMPLOYEE in buitenste lus: elk blok wordt 1 x gelezen: 2 000 RESULTAAT DEPARTMENT in binnenste lus: elk blok wordt telkens opnieuw gelezen bij volgende uitvoering van buitenste lus: 2 000 x 10 = 20 000 Totaal gelezen blokken: 22 000 37

DEPARTMENT EMPLOYEE b D = 10 b E = 2000 DEPARTMENT in buitenste lus: elk blok wordt 1 x gelezen: 10 RESULTAAT EMPLOYEE in binnenste lus: elk blok wordt telkens opnieuw gelezen bij volgende uitvoering van buitenste lus: 10 x 2 000 = 20 000 Totaal gelezen blokken: 20 010 38

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 n B buffers: n B -2buffers 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 geladen worden 39

Voorbeeld (5): de diagrammen als formules vb. join op EMPLOYEE en DEPARTMENT: OP6: EMPLOYEE Dno = Dnumber DEPARTMENT EMPLOYEE bevat b E blokken, DEPARTMENT b D kiezen we EMPLOYEE voor buitenste lus: aantal keren dat n B -2 blokken geladen worden van EMPLOYEE: b E / (n B -2) DEPARTMENT evenveel keren helemaal inlezen in totaal b D * b E /(n B -2) blokken te lezen totaal aantal blokken te lezen (EMPLOYEE en DEPARTMENT samen): b E + b D * b E /(n B -2) bv. b E = 2 000, b D = 10, n B = 7 : 6 000 blokken kiezen we DEPARTMENT in buitenste lus: b D + b E * b D /(n B -2) = 4 010 blokken 40

J2: toegangsstructuur gebruiken om overeenkomstige records 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 41

vb.: voor 50 departementen, 5 000 werknemers, b D =10, b E = 2 000 elk departement heeft een manager JSF D =1 maar 50 van de 5 000 werknemers managen een departement JSF E = 0.01 zij aantal niveaus in indexen: x Ssn = 4, x Mgr_ssn = 2 met EMPLOYEE in buitenste lus: b E + (r E * (x Mgr_ssn + 1) ) = 17 000 blokken met DEPARTMENT in buitenste lus: b D + (r D * (x Ssn + 1) ) = 260 blokken 42

J3: sort-merge join is efficiënt vb: zowel OP6 als OP7 OP6: EMPLOYEE Dno = Dnumber DEPARTMENT OP7: DEPARTMENT Mgr_ssn = Ssn EMPLOYEE vereisen b E + b D bloktoegangen O (b R + b S ), maar bestanden moeten geordend zijn indien niet: eventueel eerst sorteren externe sorteermethode toepassen totale complexiteit: O(b R + b S + b R. log b R + b E. log b E ) kan efficiënter zijn dan vorige methodes 43

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 joinmethode, evt. J4 met andere hashfunctie) tenslotte alle gejoinde bestanden aan elkaar hangen 44

hash R 1 2 3 4 alle records r van R met h(r.a)=4 1 2 3 4 1 2 3 4 hash S alle records s van S met h(s.b)=4 45

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 46

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 naar resultaat hashing: tijdens projectie kijken of tupel al voorkomt in resultaat (via hashtabel); indien ja, niet toevoegen 47

48

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 49

T R S T R S T R \ S 50

Aggregatie-operaties Indien dichte index op attribuut bestaat: resultaat kan zuiver uit 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 51

Aggregatie-operaties Group by: vb: SELECTDNO, AVG ( Salary ) FROM EMPLOYEE GROUP 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 clusterattribuut 52

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 53

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 54

Agenda Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie 55

Herhaling: A. Wat is slimmer? SELECT empname, projectname FROM emp, project WHERE emp.ssn = project.leaderssn AND emp.income > 1000000 π emp.empname, project.projectname σ emp.income > 1000000 σ emp.ssn = project.leader.ssn X π emp.empname, project.projectname join emp.ssn = project.leaderssn σ emp.income > 1000000 emp project emp project 56

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 E WHERE P.Dnum = D.Dnumber AND D.Mgrssn = E.Ssn AND P.Location = Stafford ; 57

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

Query-grafen andere grafische voorstelling van query geven geen volgorde aan daardoor minder geschikt voor optimalisatie 59

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 Lnamr FROM EMPLOYEE, WORKS_ON, PROJECT WHERE PName = Aquarius AND PNumber = Pno AND Essn = Ssn AND Bdate > 1957-12-31 ; 60

Initiële boom 61

Verplaats selectie operaties naar beneden 62

Plaats meest restrictieve selectie operaties eerst Vervang carth. product door selectie en join operaties 63

Verplaats projecties naar beneden 64

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 ) ) 65

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 kan naar 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)) 66

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 67

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 68

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) 69

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 tijdelijk bestand pipelined: vermijdt die tijdelijke bestanden 70

Voorbeeld van uitvoeringsplan voor query Q1: SELECT Fname, Lname, Address FROM EMPLOYEE, DEPARTMENT WHERE Dname = Research AND Dnumber = DNO ; Gebruik index voor selectie op DEPARTEMENT (als die bestaat) Gebruik geneste lussen voor join, (maar buitenste lus slechts 1-maal!) doorloop daarbij volledig EMPLOYEE bestand Doorloop resultaat van join voor projectie 71

Agenda Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie 72

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 73

Agenda Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie 74

Semantische query-optimalisatie Gebruik van extra kennis (in de vorm van restricties) om queries te transformeren bv. : stel dat een restrictie aangeeft dat geen werknemer meer verdient dan zijn overste; dan hoeft volgende query niet eens uitgevoerd te worden: SELECT SELECT E.Lname, E.Lname, M.Lname M.Lname FROM FROM EMPLOYEE EMPLOYEE AS AS E, E, EMPLOYEE EMPLOYEE AS AS M WHERE WHERE E.Super_ssn=M.Ssn E.Super_ssn=M.Ssn AND AND E.Salery>M.Salary; E.Salery>M.Salary; 75

Vooruitblijk Overzicht Implementatie van operaties uit relationele algebra Heuristische optimalisatie Systematische optimalisatie d.m.v. kostenschattingen Semantische query-optimalisatie Transactieverwerking 76

Bronnen Deze slides zijn gebaseerd op Henk Olivié s slides voor Gegevensbanken 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! 77