Dagens föreläsning Vad du skall komma ihåg från tidigare föreläsningar Optimering av frågor Algebraisk omformulering Kostnadsberäkningar Evaluering av frågor Algoritmer för relationsoperatorer Beräkning av resultatets storlek KTH & SU, CSC Databasteknik Föreläsning 10 sid 1
Vad du skall komma ihåg från tidigare föreläsningar DML-delen av SQL Relationsalgebraiska operatorer Mappning av SQL-uttryck på relationsalgebra Indexering KTH & SU, CSC Databasteknik Föreläsning 10 sid 2
Data dictionary Databasen innehåller en beskrivning av sig själv. Denna beskrivning lagras i en databas, Data dictionary (DD). I DD finns information om: alla termer och deras typer, relationer, användare och deras rättigheter, indexfiler, rapporter, statistik, analys, filer, backup-filer, historik, återhämtningsinformation, program i systemet, in- och utdata till programmen. DD för varuhuset: RelName AttrName Domain ITerm ForKey FKRel FRITerm Anställd Namn VarChar(50) 1 no - - Anställd Chef VarChar(50) - yes Anställd Namn Anställd Lön Integer - no - - Anställd Avd VarChar(30) - yes Avdelning Avd Försäljning Avd VarChar(30) 1 yes Avdelning Avd Försäljning Varunr Smallint 2 yes Vara Varunr KTH & SU, CSC Databasteknik Föreläsning 10 sid 3
Evaluering av frågor Evaluering av frågor Fråga DD lexikal analys syntaxkontroll Data Data frågan på internt format (RA) optimering (evalueringsplan) kodgenerering frågan i körbar kod exekvering svaret (om det finns ett svar) KTH & SU, CSC Databasteknik Föreläsning 10 sid 4
Varför optimera? Ex: Vilka firmor levererar sportskor till sportavdelningen? B-trädsindex med partiell matchning av nyckeln företag (σ lager.varunr=vara.varunr vara.typ='sportskor' lager.avd='sport' (lager vara)) Antag att lager har 10 000 tupler och vara har 600. 1. tmp lager vara 10 000 tupler från lager 600 tupler från vara 6 000 000 tupler till tmp 2. σ lager.varunr=vara.varunr vara.typ='sportskor' lager.avd='sport' (tmp) 6 000 000 tupler filtreras genom primärminnet 50 tupler kvar i primärminnet 3. resultat företag 3 tupler kvar i primärminnet 12 010 600 accesser till sekundärminnet i värsta fall KTH & SU, CSC Databasteknik Föreläsning 10 sid 5
Varför optimera? företag ( σ avd='sport' ( lager varunr (σ typ='sportskor' (vara))) lager har 10 000 tupler, vara har 600. 1. tmp varunr (σ typ='sportskor' (vara)) 600 tupler från vara läses in med 600 läsningar från sekundärminnet 50 tupler till tmp 2. resultat företag (σ avd='sport' (lager tmp)) max 10000 tupler filtreras genom primärminnet 3 tupler kvar i primärminnet = 10600 accesser till sekundärminnet i värsta fall Det är klart att vi skall optimera! KTH & SU, CSC Databasteknik Föreläsning 10 sid 6
Transformationsregler 1. Kaskadering av σ. σc1 c2 c3 (R ) σc1(σc2(σc3( (R )))) 2. Kommutativitet hos σ. σc1(σc2(r )) σc2(σc1(r )). 3. Kaskader av. Lista1 ( Lista2 ( Lista3 ( (R )))) Lista1 (R ). 4. Kommutering av σ och. Lista (σ c (R )) σ c ( Lista (R )), om c opererar endast på de attribut som finns i listan. 5. Kommutativitet hos (eller ). R c S S c R. 6. Kommutering av σ och (eller ). Om attributen i villkoret c för selektionen endast kommer från R så: σ c (R S) σ c (R) S. 7. Kommutering av och (eller ). Om Lr är attribut i R och Ls är attribut i S och L = Lr Ls, så L (R c S) Lr (R) c Ls (S). Om joinvillkoret c innehåller attribut som inte finns i L så behövs en slutlig projektion, dvs om L Lr Ls så L (R c S ) L ( Lr (R ) c Ls (S )). KTH & SU, CSC Databasteknik Föreläsning 10 sid 7
Transformationsregler 8. Mängdoperationers kommutativitet. är kommutativa, men - är inte kommutativ. 9. Associativitet hos,. Om ϕ är en av,, eller så: (R ϕ S ) ϕ T R ϕ (S ϕ T ). 10. Kommutering av σ och mängdoperationer. σ kommuterar med,, och. Om ϕ är en av,,, eller så: σ c (R ϕ S ) σ c (R ) ϕ σ c (S ). 11. Kommutering av och mängdoperationer. kommuterar med,, och. Om ϕ är en av,,, eller så: L (R ϕ S ) L (R ) ϕ L (S ). 12. De Morgans lag: (c1 c2) ( c1) ( c2) (c1 c2) ( c1) ( c2) KTH & SU, CSC Databasteknik Föreläsning 10 sid 8
En heuristisk algoritm för optimering. Bygg ett initialt evalueringsträd. En enkel algoritm 1. Använd regel 1 för att kaskadera alla σ som har konjunktiva villkor. 2. Använd reglerna 2, 4, 6 och 10 för att flytta ner alla σ så långt som möjligt i trädet. 3. Kombinera med efterföljande σ till. 4. Använd reglerna 3, 4, 7 och 11 för att föra ner så långt som möjligt i trädet. 5. Använd regel 9 för att arrangera om trädets lövnoder så att de mest restriktiva exekveras först. Mest restriktiv = minst utrymme i primärminnet. 6. Slutligen, identifiera grupper som kan exekveras som en sammanhängande operation och gör rutiner för exekvering. KTH & SU, CSC Databasteknik Föreläsning 10 sid 9
Antag databas: Bok (ISBN, titel, förf, förl) Förläggare (Förl, adress, ort) Låntagare (Namn, adress, ort, kortnr) Lån (KortNr, ISBN, Datum) Ett enkelt exempel En virtuell vy men inte temporär vy, XLån, finns, skapad genom satsen create view XLån as select titel, förf, förl, Lån.ISBN, adress, ort, Lån.kortnr, datum from Lån, Låntagare, Bok where Lån.kortnr = Låntagare.kortnr and Bok.ISBN = Lån.ISBN dvs: f (σ g (Lån, Låntagare, Bok)) där f är titel, förf, förl, Lån.ISBN, adress, ort, Lån.kortnr, datum och g är Lån.kortnr = Låntagare.kortnr Bok.ISBN = Lån.ISBN KTH & SU, CSC Databasteknik Föreläsning 10 sid 10
Ett enkelt exempel, forts Vi vill veta vilka titlar som lånats ut mellan 050701 och 060701. Endast titlarna är intressanta. Kan ske genom select titel from XLån where datum > 050701 and datum < 060701; eller titel (σ datum > 050701 datum < 060701 (XLån)) Vi får ett evalueringsträd enligt: resultatbok titel σ datum > 050701 datum < 060701 f σ g Bok Lån Låntagare KTH & SU, CSC Databasteknik Föreläsning 10 sid 11
Ett enkelt exempel, forts resultatbok titel σ datum > 050701 σ datum < 060701 titel, förf, förl, Lån.ISBN, adress, ort, Lån.kortnr, datum σ Lån.kortnr = Låntagare.kortnr Bok.ISBN = Lån.ISBN Bok Lån Låntagare KTH & SU, CSC Databasteknik Föreläsning 10 sid 12
Ett enkelt exempel, forts a. splittra σ g i σ Bok.ISBN=Lån.ISBN och σ Låntagare.kortnr=Lån.kortnr. b. datum har endast med Lån att göra. Flytta ned till strax ovanför Lån. c. σ Låntagare.kortnr=Lån.kortnr har endast med nedre vänstra kartesiska prod att göra, för ned till strax ovanför denna. resultatbok titel σ Bok.ISBN = Lån.ISBN titel, förf, förl, Lån.ISBN, adress, ort, Lån.kortnr, datum σ Lån.kortnr = Låntagare.kortnr Bok σ datum > 050701 datum < 060701 Låntagare Lån KTH & SU, CSC Databasteknik Föreläsning 10 sid 13
Ett enkelt exempel, forts a. Kombinera titel och f samt använd reglerna 3 och 4 på res + σ Bok.ISBN=Lån.ISBN resultatbok titel σ Bok.ISBN = Lån.ISBN titel,bok.isbn, Lån.ISBN σ Lån.kortnr = Låntagare.kortnr Bok σ datum > 050701 datum < 060701 Låntagare Lån KTH & SU, CSC Databasteknik Föreläsning 10 sid 14
Ett enkelt exempel, forts Använd regel 7 på första kartesiska produkten och proj ovanför denna resultatbok titel σ Bok.ISBN = Lån.ISBN Lån.ISBN titel, Bok.ISBN σ Lån.kortnr = Låntagare.kortnr Bok σ datum > 050701 datum < 060701 Låntagare Lån KTH & SU, CSC Databasteknik Föreläsning 10 sid 15
Ett enkelt exempel, forts Använd regel 3 + 4 på proj + sel ovanför andra kartesiska produkten resultatbok titel σ Bok.ISBN = Lån.ISBN Lån.ISBN titel, Bok.ISBN σ Lån.kortnr = Låntagare.kortnr Lån.ISBN, Låntagare.kortnr, Lån.kortnr Bok σ datum > 050701 datum < 060701 Låntagare Lån KTH & SU, CSC Databasteknik Föreläsning 10 sid 16
Ett enkelt exempel, forts Använd regel 7 på andra kartesiska produkten och proj ovanför denna resultatbok titel σ Bok.ISBN = Lån.ISBN Lån.ISBN titel, Bok.ISBN σ Lån.kortnr = Låntagare.kortnr Bok Lån.ISBN, Lån.kortnr Låntagare.kortnr σ datum > 050701 datum < 060701 Lån Låntagare KTH & SU, CSC Databasteknik Föreläsning 10 sid 17
Ett enkelt exempel, forts Proj + sel + kartesisk prod på två ställen kan kombineras till naturlig-join (steg 4 i alg) resultatbok titel Lån.ISBN titel, ISBN Bok ISBN, kortnr σ datum > 050701 datum < 060701 Lån kortnr Låntagare KTH & SU, CSC Databasteknik Föreläsning 10 sid 18
Ett enkelt exempel, forts Ordna om lövnoderna så att minsta datamängden hamnar längst till vänster o s v resultatbok titel Lån.ISBN titel, ISBN Bok ISBN, kortnr σ datum > 050701 datum < 060701 Lån kortnr Låntagare KTH & SU, CSC Databasteknik Föreläsning 10 sid 19
Tidsuppskattning för operationer Antal blocköverföringar: b Tiden för att föra över ett block: t T Antal disksökningar: S Tiden för en sökning: t S Antal block som behövs för att lagra relationen R: b(r) Tiden för att söka igenom relationen R: b(r)*t T + t S Tiden för bearbetning i primärminnet är i allmänhet mycket mindre än diskhanteringen. KTH & SU, CSC Databasteknik Föreläsning 10 sid 20
Selektion Linjärsökning: b(r)*t T + t S efter nyckel: b(r) /2 *t T + t S men i värsta fall b(r)*t T + t S Binärsökning (om filen är sorterad): (log 2 b(r))*(t T + t S ) I båda fallen kan man behöva lagra resultatet på disk och då tillkommer denna kostnad. Selektiviteten hos ett villkor: 1/V(A, r) där V är antalet distinkta värden för attributet A i relationen r Storleken i block: 1/V(A, r)*n r /f r där n r är antalet tupler i relationen r och f r är blockningsfaktorn för r (antalet tupler i ett block) Antal block för en punktselektion 1/V(A, r)*n r /f r som måste mellanlagras till en kostnad av (1/V(A, r)*n r /f r )*t T + t S KTH & SU, CSC Databasteknik Föreläsning 10 sid 21
Selektion med hjälp av index B + -träd med höjden h. Primärindex Likhet i nyckel: Kostnad (h+1)*(t T + t S ) Likhet i ickenyckelattribut: Som linjärsökning. Sekundärindex (h+n)*(t T + t S ) där n är antalet tupler som selekteras Hash-index Primärindex Likhet i nyckel: Kostnad 2*(t T + t S ) Likhet i ickenyckelattribut: Som linjärsökning. Sekundärindex (n+1)*(t T + t S ) där n är antalet tupler som selekteras KTH & SU, CSC Databasteknik Föreläsning 10 sid 22
Sortering Vanligast: mergesort Två faser: Hitta sorterade följder Samsortera följder Antal blockläsningar/skrivningar: 2*B(R)*log 2 B(R) (om vi inte buffrar några block) Tiden blir då: (log 2 B(R))*(B(R)/4)*t S +(2*B(R)*log 2 B(R))*t T Här är det lite förenklade beräkningar jfrt med boken. KTH & SU, CSC Databasteknik Föreläsning 10 sid 23
Projektion Primärnyckel: Som sekventiell sökning Lagring av resultatet: n(x)/n(t)* b(r) antal block där n(a) är antalet byte för attributet/attributen X och n(t) är tupelstorleken i byte. Övriga attribut: Som för ovanstående men följt av eliminering av dubbletter. Dubbletter kan elimineras genom att sortera relationen eller med hjälp av hashing. Hash-baserad dubbletteliminering: Partitionera relationen m a p hash-värde för hela tupler. Varje partition läses in och varje unikt värde skrivs till resultatet. KTH & SU, CSC Databasteknik Föreläsning 10 sid 24
Join Nästlad loop: foreach r in R do foreach s in S do add(r s) I värsta fall (kartesisk produkt) n R *b(s)+ b(r) block läses och n R *n S /f resultat skrivs annars n R *b(s)+ b(r) block läses och (n R *n S /V(A, r))/f resultat där A är det selekterande attributet. Förbättring: Blockbaserad join: M-1 block används till R och ett block för S. S kommer att skannas b(r)/(m-1) ggr Index kan användas i den inre loopen för att undersöka villkoren för joinoperationen. KTH & SU, CSC Databasteknik Föreläsning 10 sid 25
Merge-join Kan används för naturlig- och equi-join R(X), S(Y) sorteras m a p X Y. R S A B 5 2 1 3 13 6 B C 3 7 4 2 6 9 Vi behöver bara genomlöpa relationerna en gång+sortering KTH & SU, CSC Databasteknik Föreläsning 10 sid 26
Hash-join Hasha alla tupler till M hinkar m a p X Y. För varje par av hinkar med samma hash-värde skriv den konstruerade tupeln, bestående av unika kombinationer, till resultatet Antal blockoperationer: 3*(b(R) + b(s)) Obs 1: Alla tupler med samma värde på H(X Y) ligger i samma hink 2: Alla tupler i en hink måste ligga i primärminnet så antalet hinkar måste väljas efter utrymmet i PM. KTH & SU, CSC Databasteknik Föreläsning 10 sid 27
Gruppering och aggregering 1 Sortera med det/de grupperande attributet/en som sorteringsbegrepp. Applicera den aggregerande funktionen för varje värde på det grupperande attributet. Skriv till resultatet värdet av den aggregerande funktionen och det/de grupperande attributet/en 2 Använd hashing för att skapa grupperingen. För varje hink appliceras den aggregerande funktionen Antalet blockoperationer: 3*b(R) + resultat KTH & SU, CSC Databasteknik Föreläsning 10 sid 28
Optimeringskostnad Heuristisk optimering att föredra men Kostnadsberäkningar ger en bättre evaluseringsplan. Pipelining (utdata från en algoritm tas som indata till en annan) kan minska kostnaden. Minnesanvändningen viktig för exekveringen. Indexering kan både minska och öka kostnaden Materialiserade vyer (en vy som lagrar värden) kan minska kostnaden (såväl som öka) men har nackdelen att den måste synkroniseras med underliggande relationer. KTH & SU, CSC Databasteknik Föreläsning 10 sid 29
Det viktigaste på denna föreläsning Förstå principerna för optimering Flytta selektion och projektion så nära basrelationerna som möjligt Kombinera selektion och kartesisk produkt till join Ordna lövnoderna efter storleksordning så att förstaoperanden om möjligt kan ligga i PM Beräkning av antalet blockoperationer för de grundläggande operationerna Algebraiska ekvivalenser KTH & SU, CSC Databasteknik Föreläsning 10 sid 30