Dagens föreläsning Vad du skall komma ihåg från tidigare föreläsningar 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 DML-delen av SQL Relationsalgebraiska operatorer Mappning av SQL-uttryck på relationsalgebra Indexering KTH & SU, CSC Databasteknik Föreläsning 10 sid 1 KTH & SU, CSC Databasteknik Föreläsning 10 sid 2 Data dictionary Evaluering av frågor 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 Data DD Data Evaluering av frågor Fråga lexikal analys syntaxkontroll 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 3 KTH & SU, CSC Databasteknik Föreläsning 10 sid 4 1
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 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 5 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 )). 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 7 KTH & SU, CSC Databasteknik Föreläsning 10 sid 8 2
En heuristisk algoritm för optimering. En enkel algoritm Bygg ett initialt evalueringsträd. 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. Antag databas: Bok (ISBN, titel, förf, förl) Förläggare (Förl, adress, ort) (Namn, adress, ort, kortnr) (KortNr, ISBN, Datum) Ett enkelt exempel En virtuell vy men inte temporär vy, X, finns, skapad genom satsen create view X as select titel, förf, förl,.isbn, adress, ort,.kortnr, datum from,, Bok where.kortnr =.kortnr and Bok.ISBN =.ISBN dvs: f (σ g (,, Bok)) där f är titel, förf, förl,.isbn, adress, ort,.kortnr, datum och g är.kortnr =.kortnr Bok.ISBN =.ISBN KTH & SU, CSC Databasteknik Föreläsning 10 sid 9 KTH & SU, CSC Databasteknik Föreläsning 10 sid 10 Vi vill veta vilka titlar som lånats ut mellan 050701 och 060701. Endast titlarna är intressanta. Kan ske genom select titel from X where datum > 050701 and datum < 060701; eller ( (X)) Vi får ett evalueringsträd enligt: σ datum > 050701 σ datum < 060701, förf, förl,.isbn, adress, ort,.kortnr, datum f σ g Bok σ.kortnr =.kortnr Bok.ISBN =.ISBN Bok KTH & SU, CSC Databasteknik Föreläsning 10 sid 11 KTH & SU, CSC Databasteknik Föreläsning 10 sid 12 3
a. splittra σ g i σ Bok.ISBN=.ISBN och σ.kortnr=.kortnr. b. datum har endast med att göra. Flytta ned till strax ovanför. c. σ.kortnr=.kortnr har endast med nedre vänstra kartesiska prod att göra, för ned till strax ovanför denna. a. Kombinera och f samt använd reglerna 3 och 4 på res + σ Bok.ISBN=.ISBN σ Bok.ISBN =.ISBN σ Bok.ISBN =.ISBN, förf, förl,.isbn, adress, ort,.kortnr, datum σ.kortnr =.kortnr Bok,Bok.ISBN,.ISBN KTH & SU, CSC Databasteknik Föreläsning 10 sid 13 KTH & SU, CSC Databasteknik Föreläsning 10 sid 14 σ.kortnr =.kortnr Bok Använd regel 7 på första kartesiska produkten och proj ovanför denna Använd regel 3 + 4 på proj + sel ovanför andra kartesiska produkten σ Bok.ISBN =.ISBN σ Bok.ISBN =.ISBN.ISBN, Bok.ISBN.ISBN, Bok.ISBN σ.kortnr =.kortnr σ.kortnr =.kortnr Bok KTH & SU, CSC Databasteknik Föreläsning 10 sid 15.ISBN,.kortnr,.kortnr Bok KTH & SU, CSC Databasteknik Föreläsning 10 sid 16 4
Använd regel 7 på andra kartesiska produkten och proj ovanför denna Proj + sel + kartesisk prod på två ställen kan kombineras till naturlig-join (steg 4 i alg) σ Bok.ISBN =.ISBN.ISBN, Bok.ISBN.ISBN, ISBN σ.kortnr =.kortnr Bok.ISBN,.kortnr.kortnr KTH & SU, CSC Databasteknik Föreläsning 10 sid 17 Bok ISBN, kortnr kortnr KTH & SU, CSC Databasteknik Föreläsning 10 sid 18 Ordna om lövnoderna så att minsta datamängden hamnar längst till vänster o s v.isbn, ISBN 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 ISBN, kortnr Bok kortnr Tiden för bearbetning i primärminnet är i allmänhet mycket mindre än diskhanteringen. KTH & SU, CSC Databasteknik Föreläsning 10 sid 19 KTH & SU, CSC Databasteknik Föreläsning 10 sid 20 5
Selektion Selektion med hjälp av index 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 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 21 KTH & SU, CSC Databasteknik Föreläsning 10 sid 22 Sortering Projektion 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. 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 23 KTH & SU, CSC Databasteknik Föreläsning 10 sid 24 6
Nästlad loop: foreach r in R do foreach s in S do add(r s) Join 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. 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 Merge-join Vi behöver bara genomlöpa relationerna en gång+sortering KTH & SU, CSC Databasteknik Föreläsning 10 sid 25 KTH & SU, CSC Databasteknik Föreläsning 10 sid 26 Hash-join Gruppering och aggregering 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. 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 27 KTH & SU, CSC Databasteknik Föreläsning 10 sid 28 7
Optimeringskostnad Det viktigaste på denna föreläsning 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 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 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 KTH & SU, CSC Databasteknik Föreläsning 10 sid 30 Att läsa till nästa gång Silb(6): kap 22, 23, Appendix D, Appendix E Silb(5): kap 9, 10, Appendix A, Appendix B Föreläsningsanteckningar för föreläsning 12 KTH & SU, CSC Databasteknik Föreläsning 10 sid 31 8