5. Anfragebearbeitung und -optimierung Basisalgorithmen 5. Anfragebearbeitung und -optimierung Themen: • • • • Vorstellung wichtiger interner Basisalgorithmen für grundlegende Operationen Überblick: Grundprinzipien der Optimierung Phasen der Optimierung und dabei eingesetzte Methoden Fallbeispiele Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 212 5. Anfragebearbeitung und -optimierung Basisalgorithmen Datenbankparameter • • • • • nr : Anzahl der Tupel in Relation r br : Anzahl der Seiten, die Tupel aus r beinhalten sr : durchschnittliche Größe von Tupeln aus r bs: Blockgröße fr : Blockungsfaktor — bs fr = sr Es gilt: ‰ ı nr br ≥ fr • V (A, r): Anzahl der verschiedenen Werte für Attribut A in Relation r • SC(A, r): Selektionskardinalität, d.h. die durchschnittliche Anzahl an Ergebnistupeln bei σA=x(r) nr SC(A, r) = V (A, r) Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 213 5. Anfragebearbeitung und -optimierung Basisalgorithmen Annahmen für die Optimierung • Dominierender Kostenfaktor sind die Zugriffe auf Seiten der Datenbank (Peripheriespeicher). • Der Peripheriespeicher wird auch für die Speicherung von Zwischenergebnissen genutzt. • Indexe sind B*-Bäume. • Für jede Operation wird ein Zwischenergebnis in Form einer Relation erzeugt, die auf dem Peripheriespeicher abgelegt wird. • Jedes Tupel wird eindeutig durch einen Tupelidentifikator (TID) identifiziert. • Operationen auf Tupelmengen (-listen) werden im Hauptspeicher ausgeführt. • Es stehen Operation zur Verfügung für: – Tupelvergleich – Zugriff auf ein Tupel einer im Hauptspeicher liegenden Seite über die TID • Diese Operationen finden im Hauptspeicher statt. • Identifikatoren für Relationen (RelID) und Indexe (IndID) Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 214 5. Anfragebearbeitung und -optimierung Basisalgorithmen Indexarten: • Primärindex: Liefert zu einem Attributwert höchstens eine TID • Sekundärindex: Liefert mehrere Tupel (TIDs) zu einem Atrributwert Operationen: • fetch-tupel( RelID, TID ) −→ Tupel Holt ein Tupel in den Tupel-Puffer. • fetch-TID( IndID, AttrWert ) −→ TID Bestimmt den TID zu einem Attributwert (bei einem Primärindex). • Scans auf Relationen und Indexen Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 215 5. Anfragebearbeitung und -optimierung Basisalgorithmen Beispiel: SQL-Anfrage: select * from Kunde where KName = ’Meyer’ Auswertung: tid := fetch-TID( Kunde-KName-IndID, ’Meyer’ ); tupel := fetch-tupel( Kunde-RelID, tid ); output( tupel ); Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 216 5. Anfragebearbeitung und -optimierung Basisalgorithmen Sortierung ☞ Bekannte Sortierverfahren wie Quick-Sort sind nur bedingt für Datenbanken geeignet. ☞ Von Interesse sind Sortierverfahren, die den Peripheriespeicher mit einbeziehen. Sort-Merge-Verfahren: • Die Relation wird durch eine Operation partition in gleich große Teile zerlegt, die im Hauptspeicher sortiert werden können. • Die Teile werden mit einer Operation merge sortiert zusammengeführt. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 217 5. Anfragebearbeitung und -optimierung Basisalgorithmen • Anzahl an Lese- und Schreiboperationen ist im wesentlichen linear. • Lese- und Schreiboperationen auf den Partitionen sind sequentiell. • Große Puffer beim Lesen und Schreiben verwenden! • Vergleichsoperationen beim Mischen O(n log n), aber diese Vergleiche finden im Hauptspeicher statt! Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 218 5. Anfragebearbeitung und -optimierung Basisalgorithmen Scan Ein Scan greift auf alle Tupel einer Relation zu, eventuell in Verbindung mit einer Selektion oder Projektion. Dies entspricht dem Arbeiten mit einem Cursor auf einer Relation. • Full Table Scan Sequentielles Lesen aller Seiten, die zu einer Relation gehören. Aufwand: br • Index Scan Nutzt einen Index zum Auslesen der Tupel in Sortierreihenfolge. Aufwand: Seiten mit Tupel der Ergebnismenge plus Anzahl der benötigten Index-Seiten. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 219 5. Anfragebearbeitung und -optimierung Basisalgorithmen Scan-Operationen: • open-rel-scan( RelID ) −→ ScanID Initialisiert einen Relationen-Scan. • open-index-scan( IndID, Min, Max ) −→ ScanID Initialisiert einen Index-Scan auf einem Primär- oder Sekundärindex. Min und Max bestimmen den Bereich des Scans. • next-TID( ScanID ) −→ TID Liefert die nächste TID des Scans. • end-of-scan( ScanID ) −→ Boolean Prüft, ob noch weitere TIDs verfügbar sind. • close-scan( ScanID ) Schließt einen Scan. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 220 5. Anfragebearbeitung und -optimierung Basisalgorithmen Beispiel: select * from Dozenten where Name between ’Becker’ and ’Borutzky’ Relationen-Scan: scanid := open-rel-scan( DozentenID ); tid := next-TID( scanid ); while not end-of-scan( scanid ) do tupel := fetch-tupel( DozentenID, tid ); if tid.Name >= ’Becker’ and tid.name <= ’Borutzky’ then output( tupel ); endif tid := next-TID( scanid ); end close( scanid ); Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 221 5. Anfragebearbeitung und -optimierung Basisalgorithmen Index-Scan: scanid := open-index-scan( Dozenten-Name-ID, ’Becker’, ’Borutzky’ ); tid := next-TID( scanid ); while not end-of-scan( scanid ) do tupel := fetch-tupel( DozentenID, tid ); output( tupel ); tid := next-TID( scanid ); end close( scanid ); Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 222 5. Anfragebearbeitung und -optimierung Basisalgorithmen Selektion • Arten der Selektion: exakte Suche, Bereichssuche, mit Junktoren zusammengesetzte Selektionsbedingung • Wir betrachten den letzen Fall: Selektionsbedingung φ mit Junktoren (and, or, not) zusammengesetzt aus atomaren Bedingungen. • Verschiedene Arten der Auswertung: – Direkte Auswertung – konjunktiven Normalform – Filtermethode Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 223 5. Anfragebearbeitung und -optimierung Basisalgorithmen Direkte Auswertung: • Anfrage der Form σφ(r) mit Selektionsbedingung φ für Relation r. • Mit Relationen-Scan wird φ(t) für alle t ∈ r ausgewertet. • Aufwand O(nr ) bzw. br . konjunktiven Normalform (KNF): • Zugriffspfade einsetzen, hierzu φ geeignet umformen • φ wird in die konjunktive Normalform überführt, d.h. φ wird äquivalent durch eine Konjunktion von Disjunktionen von Literalen ausgedrückt. • Auswahl einer Disjunktion, die gut durch einen Index ausgewertet werden kann (z.B. A = c mit Index für Attribut A). • Index-Scan auf A und Auswertung der anderen Bedingungen auf Basis der TIDs des Index-Scans. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 224 5. Anfragebearbeitung und -optimierung Basisalgorithmen Filtermethode: • Alle Bedingungen, die nicht durch einen Index ausgewertet werden k önnen, werden auf true gesetzt; vereinfachte Bedingung φ0 • Dann wird r := σφ0 (r) mit Indexunterstützung ausgewertet (z.B. mittels KNF). • Anschließend wird σφ(r0 ) auf dem kleineren Zwischenergebnis r 0 ermittelt. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 225 5. Anfragebearbeitung und -optimierung Basisalgorithmen Projektion • • • • Hier: Projektion mit Eliminierung von Duplikaten Index-Scan hilft bei der Duplikateliminierung Projektion auf indexierte Attribute ist ohne Tupelzugriff möglich. Projektion πA (r): 1. r nach A sortieren 2. t ∈ r in Ergebis nehmen, falls t.A 6= previous(t).A • Zeitaufwand: O(nr log nr ), falls schon sortiert O(nr ), falls Schlüssel K ⊆ A : O(nr ) Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 226 5. Anfragebearbeitung und -optimierung Basisalgorithmen Aggregierung und Gruppierung • Gruppierung und Aggregierung mit Duplikatelimination können durch einen modifizierten Projektionsoperator realisiert werden. • Sie haben daher ebenfalls eine Komplexität von O(nr log nr ) • Für gewisse Aggregatsfunktion sind spezielle Realisierungen m öglich, z.B. count(*) auf einer vollständigen Relation. • Hierfür könnte direkt die Metainformation zu einem Primärindex genutzt werden. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 227 5. Anfragebearbeitung und -optimierung Basisalgorithmen Verbunde • Der Verbund (Join) ist in gewisser Weise die wichtigste Operation der relationalen Algebra, • da dies die einzige Operation ist, die verschiedene Relationen zusammenführt. • Varianten der Berechnung: – Schleifeniteration (nested loop) – Mischtechniken (merge join) – Hash-Techniken (hash join) • Gegeben seien Relationen r, s, zu denen der Verbund r ./φ s auf Basis einer Verbundbedingung φ berechnet werden soll. • Semantik: r ./φ s ⇔ σφ(r × s) Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 228 5. Anfragebearbeitung und -optimierung Basisalgorithmen Nested Loop Join: for each tr ∈ r do for each ts ∈ s do if φ(tr , ts ) = true then output(tr × ts ) endif end end • tr × ts bezeichnet die Verschmelzung der Tupel tr und ts . • Verbesserte Variante für r ./A=B s: Falls Index auf B von s, dann Berechnung der inneren Schleife durch σB=tr .A(s). Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 229 5. Anfragebearbeitung und -optimierung Basisalgorithmen Sort-Merge-Join: • Seien R, S die Attributmenge von r, s. Betrachte Equi-Verbund über eine Attributmenge A ⊆ R ∩ S . • Zuerst Sortierung von r und s nach A. • Dann Mischphase: 1. Falls tr .A < ts .A: lese nächstes tr ∈ r 2. Falls tr .A > ts .A: lese nächstes ts ∈ s 3. Falls tr .A = ts.A: (a) Bilde alle tr × t0s mit t0s.A = ts.A. (b) Lese nächstes tr . • Aufwand: Abhängig von der Selektivität von A, günstig falls A Schlüssel. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 230 5. Anfragebearbeitung und -optimierung Basisalgorithmen Hash-Join: • Tupel aus r und s werden in Dateien Fr und Fs mit jeweils k Blöcken auf der Basis von A gehasht. • Möglicher Wert für k: k = max{V (A, r), V (A, s)} • Tupel aus dem Block i von Fr werden mittels von Nested-Loop-Join mit den Tupeln aus Block i von Fs verbunden. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 231 5. Anfragebearbeitung und -optimierung Basisalgorithmen Mengenoperationen • • • • Operationen: Vereinigung, Schnitt, Differenz Weiterhin wichtig: Vereinigung mit Duplikateliminierung problemlos: Vereinigung Ansätze zur Berechnung der anderen Operationen analog der Berechnung von Verbunden: – Schleifeniteration – Mischtechniken – Hash-Techniken Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 232 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Grundprinzipien der Anfrageoptimierung • In einem RDBS wird mit SQL nur die Ergebnismenge festgelegt (deskriptiver Ansatz). • Eine möglichst gute Strategie zur Anfragebearbeitung zu bestimmen ist Aufgabe des Optimierers. • Eingabe für den Optimierer: SQL-Anfragen • Ausgabe des Optimierers: Umsetzung in eine iterative Formulierung basierend auf den behandelten Basisalgorithmen; Zugriffsplan bzw. dessen Umsetzung in Code Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 233 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Basissprachen: • SQL • Relationenalgebra • Operatorbäume, Zugriffspläne Ziel der Optimierung: • schnelle Anfragebearbeitung ⇒ wenig Seitenzugriffe ⇒ wenig Tupel- bzw. Indexzugriffe Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 234 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Teilziele der Optimierung: 1. Selektionen so früh wie möglich, um Zwischenergebnisse klein zu halten 2. Basisoperationen zusammenfassen und ohne Zwischenspeicherung realisieren 3. Redundante Operationen, Idempotenzen oder leere Zwischenrelationen entfernen 4. Wiederverwendung von Zwischenergebnissen durch Zusammenfassung gleicher Teilausdrücke Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 235 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Beispiele Relationen: KUNDE { KName, Kadr, Kto } AUFTRAG { KName, Ware, Menge } Anfrage: SELECT KUNDE.KName, KUNDE.Kto FROM KUNDE, AUFTRAG WHERE KUNDE.KName = AUFTRAG.KName and AUFTRAG.Ware = ’Kaffee’ Bezeichnungen: PROJ SEL := := KUNDE.KName, KUNDE.Kto KUNDE.KName = AUFTRAG.KName and AUFTRAG.Ware = ’Kaffee’ Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 236 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Annahmen: • • • • • • • Relation KUNDE: 100 Tupel, eine Seite faßt 5 Tupel Relation AUFTRAG: 10.000 Tupel, eine Seite fasst 10 Tupel Für 50 Aufträge gilt: Ware = ’KAFFEE’ Es passen 50 Tupel der Form (KName, Kto) auf eine Seite. 3 Tupel von KUNDE × AUFTRAG passen auf eine Seite. Puffer für Relationen hat Größe 1. Tupel werden stets komplett gespeichert. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 237 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Direkte Auswertung • R1 := Kunde × AUFTRAG – lesen: (100/5 ∗ 10.000/10) = 20.000 Seiten – schreiben: (100 ∗ 10.000)/3 ≈ 333.000 Seiten • R2 := σSEL(R1 ) – lesen: (100 ∗ 10.000)/3 ≈ 333.000 Seiten – schreiben: 50/3 ≈ 17 Seiten • ERG := πPROJ (R2 ) – lesen: 17 – schreiben: 1 ca. 687.000 Seitenzugriffe, ca. 333.000 Seiten Zwischenspeicherung Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 238 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Optimierte Auswertung • R1 := σWare=’Kaffee’(AUFTRAG) – lesen: 10.000/10 = 1000 – schreiben: 50/10 = 5 • R2 := KUNDE ./KName=KName R1 – lesen: 100/5 ∗ 5 = 100 – schreiben: 50/3 = 17 • ERG := πPROJ (R2 ) – lesen: 17 – schreiben: 1 ca. 1140 Seitenzugriffe insgesamt Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 239 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Mit Indexausnutzung • R1 := σWare=’Kaffee’(AUFTRAG) über I(AUFTRAG(Ware)) – lesen: ≥ 5, ≤ 50 Seiten – schreiben: 50/10 = 5 • R2 := sortiere R1 nach KName – lesen + schreiben: 5 ∗ log 5 ≈ 15 Seiten • R3 := KUNDE ./KName=KName R2 Merge-Join über den Index I(KUNDE(KName)) und der sortierten Relation R 2 . – lesen: 100/5 + 5 = 25 – schreiben: 50/3 = 17 • ERG := πPROJ (R3 ) – lesen: 17 – schreiben: 1 Insgesamt maximal ca. 130 Seitenzugriffe, minimal ca. 85, durch sogenanntes Pipelining ist eine weitere Minimierung möglich. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 240 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Phasen der Anfragebearbeitung 1. Übersetzung und Sichtexpansion Übersetzung in einen Operatorbaum (relationale Algebra), Einsetzen der Sichtdefinitionen, Auflösung von Unteranfragen 2. Logische/algebraische Optimierung Umformung des Anfrageplans unabhängig von der physischen Ebene, z.B. Selektionen so früh wie möglich durchführen 3. Interne Optimierung Berücksichtigung konkreter Speicherungsformen, Auswahl von Algorithmen. Erstellung mehrerer alternativer interner Pläne 4. Kostenbasierte Auswahl Statistikinformation für die Auswahl eines internen Plans nutzen 5. Code-Erzeugung Umwandlung des ausgewählten Zugriffsplans in ausführbaren Code bzw. direkte Abarbeitung des Zugriffsplans Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 241 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Von SQL zur Relationenalgebra Operatorbaum: π A1,...,Am σF select A1, . . . , Am from R1, . . . , Rn where F Anfrage in Form der Relationenalgebra: Rn πA1,...,Am (σF (R1 × · · · × Rn)) R3 R1 Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 R2 242 5. Anfragebearbeitung und -optimierung Grundprinzipien und Beispiele Diese Umsetzung geht von einer stark vereinfachten Situation aus. Für reale SQL-Anfragen muß zusätzlich folgendes geleistet werden: • Erkennen von Verbunden (./) statt Kreuzprodukten (×) • Auflösung von Unteranfragen, z.B. Differenz statt not exists • SQL-Konstrukte, die in der Relationenalgebra nicht ausgedrückt werden k önnen, z.B. group by, order by, ... • Sichtexpansion ist ein rekursiver Prozeß, da Sichten basierend auf Sichten definiert werden können. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 243 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Algebraische Optimierung • Unter der logischen Optimimierung versteht man die Phase der Optimierung ohne Zugriff auf das interne Schema und Statistikinformationen. • Notation: Relationenalgebra bzw. Erweiterungen hiervon • Die algebraische Optimierung basiert auf der Ersetzung von Termen der Relationenalgebra mit Hilfe von Äquivalenzen. • Diese Äquivalenzen stellen gerichtete Ersetzungsregeln dar. • heuristische Methode: Anwendung dieser Ersetzungsregeln, um einen besseren Plan zu erzeugen. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 244 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Prinzipien der algebraischen Optimierung Beispiel-Datenbank: BÜCHER = { Titel, Autor, Verlagsname, ISBN } VERLAGE = { Verlagsname, VerlagsAdr } ENTLEIHER = { EntlName, EntlAdr, EntlKarte } AUSLEIHE = { EntlKarte, ISBN, Datum } Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 245 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Entfernung redundanter Operationen: LANGEWEG sei eine Sicht, die wie folgt definiert ist: LANGEWEG := BÜCHER ./ πISBN,Datum(σDatum≤31.12.1999 (AUSLEIHE)) Jemand stellt die folgende Anfrage: πTitel(BÜCHER ./ LANGEWEG) Sichtexpansion liefert: πTitel(BÜCHER ./ BÜCHER ./ πISBN,Datum(σDatum≤31.12.1999 (AUSLEIHE))) Regel: Idempotenz: R ./ R = R Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 246 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Verschieben von Selektionen: Wir betrachten die Anfrage σAutor=’Witt’(BÜCHER ./ πISBN,Datum(. . .)) Hier wird erst der volle Verbund berechnet, auf dem später die Selektion Autor=’Witt’ angewendet wird. Durch eine fühere Selektion wird das Ergebnis des Joins deutlich kleiner: (σAutor=’Witt’(BÜCHER)) ./ πISBN,Datum(. . .) Regel: Selektion und Verbund kommutieren, wenn die Selektionspr ädikate dies zulassen. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 247 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Reihenfolge von Verbunden: Die Reihenfolge von Mehrfachverbunden beeinflußt ebenfalls die Gr öße der Zwischenergebnisse. Ohne Kenntnis der Statistikinformationen kann hier aber keine eindeutige Regel angegeben werden. Wir betrachten den Dreifachverbund (VERLAGE ./ AUSLEIHE) ./ BÜCHER Der erste Verbund entartet zum kartesischen Produkt. Besser ist daher die folgende Auswertung: VERLAGE ./ (AUSLEIHE ./ BÜCHER) Regel: ./ ist assoziativ und kommutativ Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 248 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Algebraische Regeln • KommJoin: Der Operator ./ ist kommutativ: R1 ./ R2 ←→ R2 ./ R1 • AssozJoin: Der Operator ./ ist assoziativ: (R1 ./ R2) ./ R3 ←→ R1 ./ (R2 ./ R3) • ProjProj: Beim Operator π dominiert in der Kombination der äußere Parameter den inneren: πX (πY (R)) ←→ πX (R) • SelSel: Eine Kombination von Prädikaten bei σ entspricht dem logischen Und. Daher können die Formeln in der Reihenfolge vertauscht werden. σF1 (σF2 (R)) ←→ σF1∧F2 (R) ←→ σF2 (σF1 (R)) Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 249 5. Anfragebearbeitung und -optimierung Algebraische Optimierung • SelProj: Die Operatoren π und σ kommutieren, wenn das Prädikat F auf den Projektionsattributen definiert ist: σF (πX (R)) ←→ πX (σF (R)) falls attr(F ) ⊆ X Ist dies nicht der Fall, muß die Projektion um die notwendigen Attribute erweitert werden: πX1 (σF (πX1 ∪X2 (R))) ←→ πX1 (σF (R)) falls attr(F ) ⊆ X1 ∪ X2 In der Praxis wird der Pfeil nach rechts benutzt. • SelJoin: Die Operatoren σ und ./ kommutieren, falls die Selektionsattribute alle aus einer der beiden Relationen stammen: σF (R ./ S) ←→ σF (R) ./ S falls attr(F ) ⊆ R Falls das Selektionsprädikat derart aufgesplittet werden kann, daß in F = F1 ∧ F2 die beiden Teile der Konjunktion passende Attribute haben, so gilt: σF (R ./ S) ←→ σF1 (R) ./ σF2 (S) falls attr(F1 ) ⊆ R und attr(F2 ) ⊆ S Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 250 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Auf jeden Fall kann ein F1 mit Attributen der Relation R abgespalten werden, wenn F2 Attribute von R und S betrifft: σF (R ./ S) ←→ σF2 (σF1 (R) ./ S) falls attr(F1 ) ⊆ R • SelUnion: σ und ∪ kommutieren: σF (R ∪ S) ←→ σF (R) ∪ σF (S) • SelDiff: σ und \ kommutieren: σF (R \ S) ←→ σF (R) \ σF (S) oder σF (R \ S) ←→ σF (R) \ S • ProjJoin: π und ./ kommutieren: πX (R ./ S) ←→ πX (πY1 (R) ./ πY2 (S)) Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 251 5. Anfragebearbeitung und -optimierung Algebraische Optimierung mit Y1 = (X ∩ attr(R)) ∪ (attr(R) ∩ attr(S)) und Y2 = (X ∩ attr(S)) ∪ (attr(R) ∩ attr(S)) Bemerkung: Die für den natürlichen Verbund benötigten Attribute müssen beim Hereinziehen der Projektion erhalten bleiben. • ProjUnion: π und ∪ kommutieren: πX (R ∪ S) ←→ πX (R) ∪ πX (S) • Es gibt eine Reihe weiterer Regeln: Distributivgesetz für ./ und ∪, Distributivgesetz für ./ und \, etc. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 252 5. Anfragebearbeitung und -optimierung Algebraische Optimierung • Idempotenzen IdemUnion: R ∪ R ←→ R IdemSchnitt: R ∩ R ←→ R IdemJoin: R ./ R ←→ R IdemDiff: R \ R ←→ {} • Leere Relationen LeerUnion: R ∪ {} ←→ R LeerSchnitt: R ∩ {} ←→ R LeerJoin: R ./ {} ←→ {} LeerDiffRechts: R \ {} ←→ R LeerDiffLinks: {} \ R ←→ {} Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 253 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Einfacher Optimierungsalgorithmus 1. Komplexe Selektionsprädikate werden aufgelöst (Regel SelSel und gegebenenfalls Regeln der Auflösung für ¬ und ∨ 2. Mittels SelJoin, selProj, SelUnion und SelDiff werden Selektionen m öglichst weit in Richtung der Blätter verschoben. Gegebenenfalls müssen Selektionen gem äß SelSel vertauscht werden. 3. ProjProj, ProjJoin, ProjUnion ermöglichen es, die Projektionen ebenfalls in Richtung der Blätter zu verschieben. Diese Einzelschritte werden in der genannten Reihenfolge solange ausgeführt, bis keine Ersetzungen mehr möglich sind. Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 254 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Beispiele: algebraische Optimierung Gegeben sei die folgende Sicht AUSLEIH INFO: πTitel,Autor,Verlagsname,...(AUSLEIHE ./ ENTLEIHER ./ BÜCHER) Wir untersuchen die folgende Anfrage: select Titel from AUSLEIH_INFO where DATUM < 1.1.03 and Autor = ’Witt’; Bemerkung: Man beachte die doppelte Projektion! Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 255 5. Anfragebearbeitung und -optimierung Algebraische Optimierung π Titel σ Datum<1.1.03 and Autor=’Witt’ Anwendung der algebraischen Regeln: 1. SelSel: Aufteilung der Selektion 2. SelProj: Verschiebung der Selektionen nach innen • zweimalige Verschiebung von σAutor=’Witt’ • zweimalige Verschiebung von σDatum<1.1.03 π ProjList BÜCHER AUSLEIHE 3. ProjProj: Zusammenfassung Projektionen der ENTLEIHER Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 256 5. Anfragebearbeitung und -optimierung Algebraische Optimierung Ergebnis: πTitel(σDatum<1.1.03(AUSLEIHE)) ./ ENTLEIHER ./ σAutor=’Witt’(BÜCHER) Anfrageplan nach Verschieben der Selektionen: Tafel ✎ • Um Zwischenergebnisse klein zu halten, können zusätzlich Projektionen mittels ProjJoin eingeführt werden. • Wenn Zwischenergebnisse gespeichert werden müssen, sollte dies auf jeden Fall passieren. Anfrageplan mit zusätzlichen Projektionen: Tafel ✎ Weiteres Beispiel: Tafel ✎ Datenbanksysteme: Weiterf ¨uhrende Konzepte — FH Bonn-Rhein-Sieg, WS 05/06 257