Advanced Databases Topic 2: query processing aspects query optimisation Query optimisation Outline: Basisregels algebraïsche herschrijving Schattingen Queryplan-generatie 1 2 Algebraïsche herschrijving gebruik de cascading rule voor de selectie om de conjunctie op maat te knippen: σ P1,, Pn (E) = σ P1 ( (σ Pn (E)) ) push down selections waar mogelijk combineer Cartesian Products met selecties om deze als join te formuleren optimaliseer de joinvolgorde voeg projecties toe om de grootte van operanden te minimaliseren onderken mogelijkheden voor combineren operatoren (σ en π samen in één scan) en pipelining Syntax voor simplesql <Query> ::= <SFW> <Query> ::= (<Query>) <SFW> ::= SELECT <SelList> FROM <FromLis> WHERE <Cond> 3 4 Syntax voor simple SQL <Cond> ::= <Cond> AND <Cond> <Cond> ::= <Tuple> IN <Query> <Cond> ::= <Attr> = <Attr> <Cond> ::= <Attr> LIKE <Pattern> Voorbeeld: MovieStar (name, address, gender, birthdate) StarsIn (title, year, starname) <Tuple> ::= <Attr> 5 6 1
SELECT title FROM StarsIn WHERE starname IN ( SELECT name FROM MovieStar WHERE birthdate LIKE %1960 ) 7 8 Transformatie van <Query> in SFW parse tree naar XRA parse tree 1. Start met het cartesisch product van alle relaties in de <FromList> 2. Zet hierboven de selectie met <Condition> 3. Zet hierboven een projectie op de <SelList> 9 10 Complicatie: IN Complicatie: IN 11 12 2
SELECT DISTINCT m1.title, m1.year FROM StarsIn m1 WHERE m1.year 40 <= ( SELECT AVG(birthdate) FROM StarsIn m2, MovieStar s WHERE m2.starname = s.name AND AND m1.title = m2.title AND m1.year = m2.year ) 13 14 15 16 Groeperen van commutatieve en associatieve binaire operatoren Schattingen De keuze voor een bepaalde executiemethode wordt bepaald aan de hand van schattingen van de kosten. Deze worden bijgehouden door het DBMS (system catalog) Voor de base tables zijn allerlei statistieken voorhanden Voor tussentijdse resultaten zijn er methoden om deze gegevens te schatten 17 18 3
Schattingen Entries van de catalog ten behoeve van tabel R B(R): het aantal blocks dat R omvat T(R): het aantal tupels in R V(R.A): het aantal verschillende waarden van attribuut A in R Min(R.A): minimale waarde in kolom A Max(R.A): maximale waarde in kolom A S(R): size; breedte tupel in bytes Schattingen: projectie Catalog voor R := π A (R) T(R ) = V(R.A) = Catalog voor R := π AB (R) 19 20 Schattingen: selectie Catalog voor R := σ P (R) onderscheid: A = c, A <= c, A <> c T(R ) = V(R.A) = Schattingen: histogrammen Gedetailleerde info betreffende waarden in kolom A. Equal-width histogram frequenties gespecificeerd per interval van vaste grootte Equal-height histogram intervalgrootte is variabel om ruwweg dezelfde kolmhoogte te verkrijgen (percentielen) 21 Most-frequent-values individuele waarden gespecificeerd, met histogrammen voor de overige waarden 22 Schattingen: histogrammen Equal width histogram Schattingen: histogrammen Equal-height histogram 0% 20% 40% 60% 80% 100% leeftijd 0 15 31 49 72 110 23 24 4
Schattingen: histogrammen Onderhoud van histogrammen Compleet, periodiek Incrementeel aanpassing T(R) voor elke update schat T(R) aan de hand van # blocks in B-tree index Schattingen: join Catalog voor U := R met joinattribuut A T(U) = V(U.A) = V(U.B) = S 25 26 Nog meer schattingen union intersection difference duplicate elimination grouping Physical plan space Kan nogal groot zijn Case study: join ordering gangbare restrictie: left deep trees (zie links) 27 28 Join ordering Dynamic programming Greedy heuristic kies in elke stap de relatie die het kleinste tussenresultaat geeft Vuistregel bereken exacte oplossing tot n ~= 6 pas daarboven een heuristiek toe Dynamic programming De beste manier om R1, R2,, Rn te joinen: R1 join (de beste manier om R2, R3,, Rn te joinen) R2 join (de beste manier om R1, R3,, Rn te joinen). Rn join (de beste manier om R1, R2,, Rn-1 te joinen) 29 30 5
Dynamic programming: voorbeeld Dynamic programming: voorbeeld 31 32 Dynamic programming: voorbeeld Dynamic programming: voorbeeld 33 34 6