Datenbanksysteme I Anfragebearbeitung und -optimierung 21.12.2006 Felix Naumann Folien: u.a. von Ulf Leser und Alfons Kemper, Chris Olsten, Hector Garcia-Molina Organisatorisches 2 ■ Parallele Klausur „Modellierung“ ■ Zugang zu Studentenrechnern ■ Zugang zu Lehrmaterialien Felix Naumann | Datenbanksysteme I | WS 06/07 1 Anfragebearbeitung – Grundproblem 3 ■ Anfragen sind deklarativ. □ SQL, Relationale Algebra ■ Anfragen müssen in ausführbare (prozedurale) Form transformiert werden. ■ Ziele □ „QEP“ – prozeduraler Query Execution Plan □ Effizienz – Schnell – Wenig Ressourcenverbrauch (CPU, I/O, RAM, Bandbreite) Felix Naumann | Datenbanksysteme I | WS 06/07 Ablauf der Anfragebearbeitung 4 1. Parsing □ Parsen der Anfrage (Syntax) □ Überprüfen der Elemente („Semantik“) SQL Anfrage □ Parsebaum 2. Wahl des logischen Anfrageplans □ Baum mit logischen Operatoren Parsing □ Potentiell exponentiell viele □ Wahl des optimalen Plans – Logische Optimierung – Regelbasierter Optimierer – Kostenbasierter Optimierer 3. Wahl des physischen Anfrageplans □ Ausführbar □ Programm mit physischen Operatoren – Algorithmen – Scan Operatoren □ Wahl des optimalen Plans – physische Optimierung Wahl des logischen Anfrageplans Wahl des physischen Anfrageplans Anfrageplan ausführen Felix Naumann | Datenbanksysteme I | WS 06/07 2 Überblick 5 ■ Parsen der Anfrage ■ Transformationsregeln der RA ■ Logische Anfragepläne ■ Optimierung ■ Kostenmodelle ■ (Dynamische Programmierung) Hinweis: Kapitel 16 im Lehrbuch Felix Naumann | Datenbanksysteme I | WS 06/07 Syntaxanalyse 6 Aufgabe: Umwandlung einer SQL Anfrage in einen Parsebaum. ■ Atome (Blätter) □ Schlüsselworte □ Konstanten □ Namen (Relationen und Attribute) □ Syntaxzeichen □ Operatoren ■ Syntaktische Kategorien □ Namen für Teilausdrücke einer Anfrage Felix Naumann | Datenbanksysteme I | WS 06/07 3 Eine Grammatik für einen Teil von SQL 7 ■ Anfragen □ <Anfrage> :: = <SFW> □ <Anfrage> :: = ( <SFW> ) □ Mengenoperatoren fehlen ■ SFWs □ <SFW> ::= SELECT <SelListe> FROM <FromListe> WHERE <Bedingung> □ Gruppierung, Sortierung etc. fehlen ■ Listen □ <SelListe> ::= <Attribut>, <SelListe> □ <SelListe> ::= <Attribut> □ <FromListe> ::= <Relation>, <FromListe> □ <FromListe> ::= <Relation> ■ Bedingungen (Beispiele) □ <Bedingung> ::= <Bedingung> AND <Bedingung □ <Bedingung> ::= <Tupel> IN <Anfrage> □ <Bedingung> ::= <Attribut> = <Attribut> □ <Bedingung> ::= <Attribut> LIKE <Muster> ■ <Tupel>, <Attribut>, <Relation>, <Muster> nicht durch grammatische Regel definiert ■ Vollständig z.B. hier: http://docs.openlinksw.com/virtuoso/GRAMMAR.html Felix Naumann | Datenbanksysteme I | WS 06/07 Abfragebearbeitung – Syntax 8 ■ SELECT title FROM StarsIn WHERE starName IN ( SELECT name FROM MovieStar WHERE birthdate LIKE ‘%1960’ ); ■ Filme in denen mindestens ein Schauspieler mitspielt, der 1960 geboren wurde. Felix Naumann | Datenbanksysteme I | WS 06/07 4 Parse-Baum 9 <Anfrage> SELECT Titel FROM spielt_in WHERE SchauspielerName IN ( SELECT Name FROM Schauspieler WHERE Geburtstag LIKE ‘%1960’ ); <SFW> SELECT <SelListe> FROM <Attribut> <FromListe> WHERE <Relation> Titel <Bedingung> <Tupel> IN <Anfrage> <Attribut> spielt_in ( <Anfrage> ) Schauspielername <SFW> SELECT <SelListe> <Attribut> FROM <FromListe> <RelName> Name Schauspieler <Bedingung> WHERE <Attribut> LIKE <Muster> Geburtstag ‘%1960’ Felix Naumann | Datenbanksysteme I | WS 06/07 Parse-Baum <Anfrage> 10 <SFW> SELECT Titel FROM spielt_in, Schauspieler WHERE SchauspielerName = Name AND Geburtstag LIKE ‘%1960’; SELECT <SelListe> <Attribut> FROM <FromListe> WHERE <Relation> <Bedingung> , <FromListe> <Bedingung> AND <Bedingung> Titel spielt_in <Relation> <Attribut> = <Attribut> <Attribut> LIKE <Muster> Schauspieler SchauspielerName Name Geburtstag ‘%1960’ Felix Naumann | Datenbanksysteme I | WS 06/07 5 Prüfung der Semantik 11 Während der Übersetzung semantische Korrektheit prüfen ■ Existieren die Relationen und Sichten der FROM Klausel? ■ Existieren die Attribute in den genannten Relationen? □ Sind sie eindeutig? ■ Korrekte Typen für Vergleiche? ■ Aggregation korrekt? ■ ... Felix Naumann | Datenbanksysteme I | WS 06/07 Überblick 12 ■ Parsen der Anfrage ■ Transformationsregeln der RA ■ Logische Anfragepläne ■ Optimierung ■ Kostenmodelle ■ (Dynamische Programmierung) Felix Naumann | Datenbanksysteme I | WS 06/07 6 Anfragebearbeitung – Transformationsregeln 13 Transformation der internen Darstellung ■ Ohne Semantik zu verändern ■ Zur effizienteren Ausführung □ Insbesondere: Kleine Zwischenergebnisse Äquivalente Ausdrücke ■ Zwei Ausdrücke der relationalen Algebra heißen äquivalent, falls □ Gleiche Operanden (= Relationen) □ Stets gleiche Antwortrelation Stets: Für jede mögliche Instanz der Datenbank Felix Naumann | Datenbanksysteme I | WS 06/07 Anfragebearbeitung – Beispiel 14 π(Nachname) π(Nachname) σ(p.Budget < 40.000) σ(p.Budget < 40.000) σ(m.p_id = p.p_id) X mitarbeiter projekte ><m.p_id = p.p_id mitarbeiter projekte Felix Naumann | Datenbanksysteme I | WS 06/07 7 Anfragebearbeitung – Beispiel 15 π(Nachname) π(Nachname) σ(p.Budget < 40.000) ><m.p_id = p.p_id ><m.p_id = p.p_id σ(p.Budget < 40.000) mitarbeiter projekte mitarbeiter projekte Felix Naumann | Datenbanksysteme I | WS 06/07 Kommutativität und Assoziativität 16 ■ × ist kommutativ und assoziativ □ R×S=S×R Gilt jeweils für Mengen und Multimengen □ (R × S) × T = R × (S × T) ■ ∪ ist kommutativ und assoziativ □ R∪S=S∪R □ (R ∪ S) ∪ T = R ∪ (S ∪ T) Ausdrücke können in beide Richtungen verwendet werden. ■ ∩ ist kommutativ und assoziativ □ R∩S=S∩R □ (R ∩ S) ∩ T = R ∩ (S ∩ T) ■ ⋈ ist kommutativ und assoziativ □ R⋈S=S⋈R □ (R ⋈ S) ⋈ T = R ⋈ (S ⋈ T) Gilt nicht unbedingt für θ-Join: R(a,b), S(b,c), T(c,d) (R ⋈R.b>S.b S) ⋈a<d T ≠ R ⋈R.b>S.b (S ⋈a<d T) Felix Naumann | Datenbanksysteme I | WS 06/07 8 Transformationsregeln für Selektion 17 ■ Selektion sind interessant für Optimierung □ Reduzieren Ergebnis und Zwischenergebnisse □ Deshalb: Im Baum soweit wie möglich nach unten verschieben □ „pushing selections“ ■ Aufbrechen von Konjunktionen und Disjunktionen im Selektionsprädikat □ σc1 AND c2(R ) = σc1(σc2 (R)) □ σc1 OR c2(R ) = σc1(R) ∪ σc2 (R) – Nicht bei Multimengen ■ Reihenfolge der Anwendung □ σc1(σc2(R)) = σc2(σc1(R)) Felix Naumann | Datenbanksysteme I | WS 06/07 Transformationsregeln für Selektion 18 ■ Selektionen auf Mengeoperationen ■ Für Φ ∈ {∪, ∩ , − , ⋈} gilt: □ σc(R Φ S) ≡ (σc (R)) Φ (σc (S)) ■ Falls Bedingung C nur Attribute aus R betrifft □ σc(R Φ S) ≡ (σc (R)) Φ S ■ Beispiel □ Zwei Relationen R(a,b) und S(b,c) □ σ(a=1 OR a=3) AND b<c(R ⋈ S) □ = σ(a=1 OR a=3) (σ b<c(R ⋈ S)) □ = σ(a=1 OR a=3) (R ⋈ σ b<c(S)) □ = σ(a=1 OR a=3) (R) ⋈ σ b<c(S) Felix Naumann | Datenbanksysteme I | WS 06/07 9 Pushing Selections 19 Es ist manchmal sinnvoll, Selektionen auch nach oben zu ziehen. ■ CREATE VIEW FilmeAus1996 AS SELECT * FROM FILME WHERE Jahr = 1996; ■ SELECT SchauspielerName, StudioName FROM FilmeAus1996 NATURAL JOIN spielt_in πSchauspielerName, Studioname πSchauspielerName, Studioname πSchauspielerName, Studioname ⋈ σJahr=1996 ⋈ σJahr=1996 Filme ⋈ spielt_in Filme σJahr=1996 σJahr=1996 Filme spielt_in spielt_in Felix Naumann | Datenbanksysteme I | WS 06/07 Transformationsregel für Projektion 20 ■ Ziel: Projektionen soweit wie möglich im Baum nach unten schieben □ „pushing projections“ □ Meist bleibt eine zusätzliche Projektion zurück □ Nutzen nicht so stark wie bei Selektionen ■ Grundregel: Eine Projektion darf überall eingeführt werden, falls nur Attribute eliminiert werden, die □ Nicht im Anfrageergebnis verlangt werden □ In keinem späteren Operator verwendet werden ■ πL(R ⋈ S) = πL(πM(R) ⋈ πN(S)) ■ πL(R ⋈C S) = πL(πM(R) ⋈C πN(S)) ■ πL(R × S) = πL(πM(R) × πN(S)) ■ Beispiel □ R(a,b,c), S(c,d,e) □ πa+e→x, b→y(R ⋈ S) = πa+e→x, b→y(πa,b,c(R) ⋈ πc,e(S)) = πa+e→x, b→y(R ⋈ πc,e(S)) ■ Entsprechende Regeln gelten nicht für Mengenoperationen Felix Naumann | Datenbanksysteme I | WS 06/07 10 Transformationsregel für Projektion 21 ■ πLσC(R)) = πL(σC(πM(R))) □ Nur falls M die Menge L und alle Attribute, die in C verwendet werden enthält. ■ SELECT SchauspielerName FROM spielt_in WHERE FilmJahr = 1996 πSchauspielerName πSchauspielerName σFilmJahr=1996 σFilmJahr=1996 πSchauspielerName, FilmJahr spielt_in spielt_in Felix Naumann | Datenbanksysteme I | WS 06/07 Weitere Regeln 22 Joins und Kreuzprodukte ■ R ⋈C S = σC(R × S) ■ R ⋈ S = πLσC(R × S) Duplikateliminierung ■ δ(R) = R □ Falls R einen Primärschlüssel enthält □ Falls R das Resultat einer Gruppierung ist: δ(γL(R)) = γL(R) ■ δ(R × S) = δ(R) × δ(S) ■ δ(R ⋈ S) = δ(R) ⋈ δ(S) ■ δ(R ⋈C S) = δ(R) ⋈C δ(S) ■ δ(σC(R) = σC(δ(R)) ■ δ(R ∪ S) = R ∪ S □ Gilt auch für andere Mengenoperationen Felix Naumann | Datenbanksysteme I | WS 06/07 11 Überblick 23 ■ Parsen der Anfrage ■ Transformationsregeln der RA ■ Logische Anfragepläne ■ Optimierung ■ Kostenmodelle ■ (Dynamische Programmierung) Felix Naumann | Datenbanksysteme I | WS 06/07 Vom Parsebaum zum logischen Anfrageplan 24 ■ Schritt 1: Knoten des Parsebaums umwandeln □ In Knoten mit Operatoren der RA □ In entsprechenden Gruppen ■ Schritt 2: Voroptimierung □ Selektionen pushen □ Subanfragen entfernen (nicht hier) □ Operatoren gruppieren Felix Naumann | Datenbanksysteme I | WS 06/07 12 Vom Parsebaum zur relationalen Algebra 25 ■ Basisregel □ Kreuzprodukt aller Relationen der FromListe □ Danach Selektion entsprechend der Bedingung – Falls Bedingung keine Subanfrage enthält □ Danach Projektion entsprechend der SelListe ■ Subanfragen entfernen □ Nicht hier! <Anfrage> <SFW> SELECT <SelListe> FROM <FromListe> WHERE <Bedingung> Felix Naumann | Datenbanksysteme I | WS 06/07 Parse-Baum <Anfrage> 26 <SFW> SELECT Titel FROM spielt_in, Schauspieler WHERE SchauspielerName = Name AND Geburtstag LIKE ‘%1960’; SELECT <SelListe> <Attribut> FROM <FromListe> WHERE <Relation> <Bedingung> , <FromListe> <Bedingung> AND <Bedingung> Titel spielt_in <Relation> <Attribut> = <Attribut> <Attribut> LIKE <Muster> Schauspieler SchauspielerName Name Geburtstag ‘%1960’ πTitel σSchauspielerName=Name AND Geburtstag LIKE ‘%1960’ × spielt_in Schauspieler Felix Naumann | Datenbanksysteme I | WS 06/07 13 Überblick 27 ■ Parsen der Anfrage ■ Transformationsregeln der RA ■ Logische Anfragepläne ■ Optimierung ■ Kostenmodelle ■ (Dynamische Programmierung) Felix Naumann | Datenbanksysteme I | WS 06/07 Grundsätze der Anfrageoptimierung 28 ■ High-level SQL (deklarativ nicht prozedural) □ „was“, nicht „wie“. ■ Das „wie“ bestimmt sich aus der Abbildung der mengenorientierten Operatoren auf die Schnittstellen-Operatoren der internen Ebene. □ Zugriff auf Datensätze in Dateien, Einfügen/Entfernen interner Datensätze, Modifizieren interner Datensätze ■ Zu einem „was“ kann es zahlreiche „wie‘s“ geben. □ Äquivalenzerhaltende Transformationen ■ Im Allgemeinen wird nicht die optimale Auswertungsstrategie gesucht, sondern eine einigermaßen effiziente Variante. □ Ziel: „Avoid the worst case“ Felix Naumann | Datenbanksysteme I | WS 06/07 14 Anfragebearbeitung - Optimierung 29 Regelbasierte Optimierung ■ Fester Regelsatz schreibt Transformationen gemäß der genannten Regeln vor. ■ Prioritäten unter den Regeln □ Heuristik Kostenbasierte Optimierung ■ Kostenmodell ■ Transformationen um Kosten zu verringern ■ Bestimmung des optimalen Plans □ Bestimmung der optimalen Joinreihenfolge Felix Naumann | Datenbanksysteme I | WS 06/07 Logische und physische Optimierung 30 ■ Logische Optimierung □ Jeder Ausdruck kann in viele verschiedene, semantisch äquivalente Ausdrücke umgeschrieben werden. □ Wähle den (hoffentlich) besten Ausdruck (=Plan, QEP) ■ Physische Optimierung □ Für jede relationale Operation gibt es viele verschiedene Implementierungen. □ Zugriff auf Tabellen – Scan, verschiedene Indizes, sortierter Zugriff, … □ Joins – Nested loop, sort-merge, hash, … □ Wähle für jede Operation die (hoffentlich) beste Implementierung ■ Abhängigkeit beider Probleme! Felix Naumann | Datenbanksysteme I | WS 06/07 15 Logische Optimierung 31 Grundsätze der logischen Optimierung ■ Selektionen können so weit wie möglich im Baum nach unten geschoben werden. □ Manchmal lohnt es sich, sie nach oben zu schieben ■ Selektionen mit AND können aufgeteilt und separat verschoben werden. ■ Projektionen können so weit wir möglich im Baum nach unten verschoben werden, □ bzw. neue Projektionen können eingefügt werden. ■ Duplikateliminierung kann manchmal entfernt werden oder verschoben werden. ■ Kreuzprodukte können mit geeigneten Selektionen zu einem Join zusammengefasst werden. Noch nicht hier erwähnt: Suche nach der optimalen Joinreihenfolge Felix Naumann | Datenbanksysteme I | WS 06/07 Anwendung der Transformationsregeln πs.Semester 32 σp.Name = ´Sokrates´ and ... select distinct s.Semester from Studenten s, hören h Vorlesungen v, Professoren p where p.Name = ´Sokrates´ and v.gelesenVon = p.PersNr and v.VorlNr = h.VorlNr and h.MatrNr = s.MatrNr In welchen Semestern sind die Studenten, die VLen bei Sokrates hören? × × × s p v h Folie: Prof. Alfons Kemper, TU München Felix Naumann | Datenbanksysteme I | WS 06/07 16 Aufspalten der Selektionsprädikate 33 πs.Semester πs.Semester σp.PersNr=v.gelesenVon σp.Name = ´Sokrates´ and ... σv.VorlNr=h.VorlNr × σp.Name = ´Sokrates´ p × × s σs.MatrNr=h.MatrNr × × v p × h v Folie: Prof. Alfons Kemper, TU München s h Felix Naumann | Datenbanksysteme I | WS 06/07 Verschieben der Selektionsprädikate „Pushing Selections“ πs.Semester 34 πs.Semester σp.PersNr=v.gelesenVon σp.PersNr=v.gelesenVon σv.VorlNr=h.VorlNr σs.MatrNr=h.MatrNr σp.Name = ´Sokrates´ × × s × p × σv.VorlNr=h.VorlNr σp.Name = `Sokrates` × σs.MatrNr=h.MatrNr v s h Felix Naumann | Datenbanksysteme I | WS 06/07 v × p h Folie: Prof. Alfons Kemper, TU München 17 35 Zusammenfassung von Selektionen und Kreuzprodukten zu Joins πs.Semester σp.PersNr=v.gelesenVon πs.Semester ⋈p.PersNr=v.gelesenVon × σv.VorlNr=h.VorlNr σp.Name = ´Sokrates´ × ⋈v.VorlNr=h.VorlNr σs.MatrNr=h.MatrNr p σp.Name = ´Sokrates´ v × p ⋈s.MatrNr=h.MatrNr s h v Folie: Prof. Alfons Kemper, TU München s h Felix Naumann | Datenbanksysteme I | WS 06/07 36 Optimierung der Joinreihenfolge: Kommutativität und Assoziativität ausnutzen πs.Semester πs.Semester ⋈s.MatrNr=h.MatrNr ⋈p.PersNr=v.gelesenVon ⋈v.VorlNr=h.VorlNr s ⋈v.VorlNr=h.VorlNr ⋈s.MatrNr=h.MatrNr s h σp.Name = ´Sokrates´ ⋈p.PersNr=v.gelesenVon v p h σp.Name = ´Sokrates´ Felix Naumann | Datenbanksysteme I | WS 06/07 p v Folie: Prof. Alfons Kemper, TU München 18 37 Was hat´s gebracht? πs.Semester 4 ⋈s.MatrNr=h.MatrNr ⋈p.PersNr=v.gelesenVon 4 ⋈v.VorlNr=h.VorlNr 13 ⋈v.VorlNr=h.VorlNr 13 ⋈s.MatrNr=h.MatrNr s πs.Semester 4 3 σp.Name = ´Sokrates´ ⋈p.PersNr=v.gelesenVon p v 1 h σp.Name = ´Sokrates´ h Felix Naumann | Datenbanksysteme I | WS 06/07 p v Folie: Prof. Alfons Kemper, TU München Einfügen von Projektionen πs.Semester πs.Semester 38 ⋈s.MatrNr=h.MatrNr ⋈s.MatrNr=h.MatrNr ⋈v.VorlNr=h.VorlNr πh.MatrNr s ⋈v.VorlNr=h.VorlNr h h v s ⋈p.PersNr=v.gelesenVon ⋈p.PersNr=v.gelesenVon σp.Name = ´Sokrates´ s σp.Name = ´Sokrates´ p Naumann | Datenbanksysteme I | WS 06/07 Felix p v Folie: Prof. Alfons Kemper, TU München 19 Gruppierung assoziativer / kommutativer Operatoren 39 Fasse Teilbäume mit gleichen assoziativen und kommutativen Operatoren zu nären Operatoren zusammen ■ Natürlicher Join, Vereinigung, Schnittmenge ⋈ ∪ ⋈ ⋈ ⋈ U V W ∪ R S T ∪ U V W R S T ■ Klappt manchmal auch für θ-Joins und Natural Joins zusammen □ Natural Joins zu θ-Join mit entsprechenden Bedingungen umwandeln □ Projektion um doppelte Attribute zu entfernen □ Bedingungen müssen assoziativ sein Felix Naumann | Datenbanksysteme I | WS 06/07 Überblick 40 ■ Parsen der Anfrage ■ Transformationsregeln der RA ■ Logische Anfragepläne ■ Optimierung ■ Kostenmodelle ■ (Dynamische Programmierung) Felix Naumann | Datenbanksysteme I | WS 06/07 20 Kostenbasierte Optimierung 41 ■ Konzeptionell: Generiere alle denkbaren Anfrageausführungspläne ■ Bewerte deren Kosten anhand eines Kostenmodells □ Statistiken und Histogramme □ Kalibrierung gemäß verwendeter Rechner □ Abhängig vom verfügbaren Speicher Achtung: Nicht zu lange optimieren! □ Aufwands-Kostenmodell – Durchsatz-maximierend – Nicht Antwortzeit-minimierend ■ Führe billigsten Plan aus Felix Naumann | Datenbanksysteme I | WS 06/07 Problemgröße (Suchraum) 42 ■ Konzeptionell: Generiere alle denkbaren Anfrageausführungspläne ■ Anzahl Bushy-Pläne mit n Tabellen n 2n (2(n-1))!/(n-1)! 2 4 2 (2(n-1))! 5 32 1.680 (n-1)! 10 1.024 1,76*1010 20 1.048.576 4,3*1027 ■ Plankosten unterscheiden sich um viele Größenordnungen. ■ Optimierungsproblem ist NP-hart Folie: Prof. Alfons Kemper, TU München Felix Naumann | Datenbanksysteme I | WS 06/07 21 Kostenmodell 43 Indexinformationen Algebraischer Ausdruck Ballungsinformationen Kostenmodell DB-Kardinalitäten Ausführungskosten Attributverteilungen Folie nach Prof. Alfons Kemper, TU München Felix Naumann | Datenbanksysteme I | WS 06/07 Statistiken 44 ■ Zu jeder Basisrelation □ Anzahl der Tupel □ Tupelgröße ■ Zu (jedem) Attribut □ Min / Max Problem: Erstellung und Update der Statistiken ■ Deshalb meist nur explizit/manuell zu initiieren □ runstats() □ Werteverteilung (Histogramm) □ Anzahl der distinct Werte ■ Zum System □ Speichergröße □ Bandbreite □ I/O Zeiten □ CPU Zeiten Felix Naumann | Datenbanksysteme I | WS 06/07 22 Kosten von Operationen 45 Projektion: ■ Keine Kosten falls mit anderem Operator kombiniert Selektion ■ Ohne Index: Gesamte Relation von Festplatte lesen ■ Mit Baum-Index: Teil des Index von Platte lesen (Baumtiefe) und gesuchte Seite von Platte lesen ■ Bei Pipelining: (Fast) keine Kosten Join ■ Je nach Joinalgorithmus ■ Nested Loops, Hash-Join, Sort-Merge Join Sortierung: Nicht hier Felix Naumann | Datenbanksysteme I | WS 06/07 Kosten von Operationen 46 Wesentliches Kostenmerkmal: Anzahl der Tupel im Input ■ Insbesondere: Passt die Relation in den Hauptspeicher? ■ Selektion, Projektion, Sortierung, Join Output ist Input des nächsten Operators. Deshalb: Ein Kostenmodel schätzt u.a. für jede Operation die Anzahl der Ausgabetupel. ■ „Selektivität“ in Bezug auf Inputgröße ■ #Ausgabetupel = #Eingabetupel x Selektivität ■ Auch „Selektivitätsfaktor“ (selectivity factor, sf) Felix Naumann | Datenbanksysteme I | WS 06/07 23 Selektivität 47 Selektivität schätzt Anzahl der qualifizierenden Tupel relativ zur Gesamtanzahl der Tupel in der Relation. Projektion: ■ sf = |R|/|R| = 1 Selektion: ■ sf = |σC(R)| / |R| Join: ■ sf = |R ⋈ S| / |R x S| = |R ⋈ S| / (|R| · |S|) Felix Naumann | Datenbanksysteme I | WS 06/07 Selektivität schätzen 48 Selektion: ■ Selektion auf einen Schlüssel: □ sf = 1 / |R| ■ Selektion auf einen Attribut A mit m verschiedenen Werten: □ sf = (|R| / m) / |R| = 1/m □ Dies ist nur geschätzt! Join ■ Equijoin zwischen R und S über Fremdschlüssel in S □ sf = 1/ |R| □ „Beweis“: sf = |R ⋈ S| / (|R| x |S|) = |S| / (|R| · |S|) Felix Naumann | Datenbanksysteme I | WS 06/07 24 Selektivität schätzen 49 Felix Naumann | Datenbanksysteme I | WS 06/07 Modelle zum besseren Schätzen der Selektivität 50 Gleichverteilung der Werte ■ Platzsparend (count, max, min), einfach ■ Schlechte Abschätzung bei “skew” (ungleiche Verteilung) Histogramme (Beispiel gleich) ■ Parametrisierte Größe, einfach ■ Güte der Abschätzung hängt von Histogrammtyp und -größe ab. ■ Außerdem: Aktualität Sampling ■ Repräsentative Teilmenge der Relation ■ Parametrisierte Größe, schwierig zu finden ■ Güte hängt von Samplingmethode und Samplegröße ab ■ Außerdem: Aktualität Felix Naumann | Datenbanksysteme I | WS 06/07 25 Beispiel zu Histogrammen 1600 51 1400 1200 1000 Frequency SELECT * FROM product p, sales S WHERE p.id=s.p_id and p.price > 100 800 600 400 200 0 0-1 1-2 2-5 Gegeben 3300 products, 1M sales 5-10 10-20 20-50 50-100 1001000 Price Range Gleichverteilung ■ Preisspanne ist 0-1000 => Selektivität der Bedingung ist 9/10 □ Erwartet: 9/10*3300 ≈ 3000 Produkte Histogramm-basiert ■ Angenommen 10 equi-width buckets ■ Selektivität der Bedingung ist 5/3300 ≈ 0,0015 also 5 Produkte Felix Naumann | Datenbanksysteme I | WS 06/07 Kosten – Weitere Komplikationen 52 Parallelität / Pipelining ■ Kosten aller Operatoren können nicht addiert werden. Hauptspeichergröße ■ Pufferung und Caching I/O Kosten (Lesen einer Seite) vs. CPU Kosten Multiuser: Durchsatz statt Antwortzeit => Kostenmodelle sind hochkomplex Felix Naumann | Datenbanksysteme I | WS 06/07 26