Indexstrukturen in SQL Indexstrukturen in SQL

Werbung
Indexstrukturen in SQL
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Anlegen eines Primärindex in SQL:
create table Dozenten (
DNr
integer primary key,
Name
varchar(50),
Geburt date,
)
um eindeutigkeit des
Primärschlüssels zu
verwalten
wird automatisch ein Index
angelegt
Anlegen eines Sekundärindex in SQL:
create [Unique] index indexname on tablename
(columnName[ASC|DESC][,…])
Bsp:
create index name_geb on Dozent
(Name ASC, Geburt DESC)
1
Indexstrukturen in SQL
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Index Reihenfolge:
1.) create index name_geb on Dozent
2
(Name, Geburt)
2.)
create index geb_name on Dozent
(Geburt, Name )
Welcher Index unterstüzt folgende Anfrage besser:
Select Name from Dozent where Name like ‘H%‘
Index „name_geb“ ist besser, da Name ein Praefix
von Name, Geburt.
Ludwig Maximilians Universität München
Institut für Informatik
Lehr- und Forschungseinheit für Datenbanksysteme
Skript zur Vorlesung
Datenbanksysteme I
Wintersemester 2004/2005
Kapitel 10: Relationale
Anfragebearbeitung
Vorlesung: Christian Böhm
Übungen: Elke Achtert, Karin Kailing
Skript © 2004 Christian Böhm
http://www.dbs.informatik.uni-muenchen.de/Lehre/DBS
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Relationale Anfragebearbeitung
Zentrale Aufgabe der Anfragebearbeitung ist die
Übersetzung der deklarativen Anfrage in einen effizienten,
prozeduralen Auswertungsplan
deklarative Anfrage
Scanner/Parser
View-Ersetzung
algebraischer Ausdruck
Anfrageoptimierung
Auswertungsplan
4
Ausführung
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Kanonischer Auswertungsplan zu einer SQL-Anfrage
(Ergebnis der ersten Übersetzungsphase)
π [ A1 , A2 ]
σ [ B2 ]
select A1, A2, …
from R1, R2, …
σ [ B1 ]
where B1and B2,
…
x
R1
1.
Bilde das kartesische Produkt der Relationen R1, R2, …
2.
Führe Selektionen mit den einzelnen Bedingungen B1, B2, …
durch.
3.
Projiziere die Ergebnistupel auf die erforderlichen Attribute A1,
A2, …
R2
π A , A (σ B (σ B ( R1 × R2 )))
5
1
2
2
1
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Beispiel Autodatenbank
Kunden(KNr, Name, Adresse, Region, Saldo)
6
KNr
201
337
444
108
Name
Klein
Horn
Berger
W eiss
Adresse
Lilienthal
Dieburg
München
W ürzburg
Region
Bremen
Rhein-Main
München
Unterfranken
Saldo
200.000
100.000
300.000
500.000
View GuteKunden(KNr, Name, Adresse, Region, Saldo) =
select * from Kunden where Saldo ≥ 300.000
Bestellt(BNr, Datum, KNr, Region, Saldo) Produkt(PNr, Bezeichnung, Anzahl, Preis)
BNr
221
312
401
456
458
Datum
10.05.04
11.05.04
20.05.04
13.05.04
14.05.04
KNr
201
201
337
444
444
PNr
12
4
330
330
98
PNr
12
4
330
98
14
Bezeichnung
BMW 318i
Golf 5
Fiat Uno
Ferrari 380
Opel Corsa
Anzahl
10
40
5
1
14
Preis
40.000
25.000
18.000
180.000
17.000
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Einfache SQL-Anfrage:
Welche guten Kunden (Name) haben einen Fiat Uno bestellt
(und Saldo ≥ 300.000) ?
7
select
from
where
and
and
Name
GuteKunden k, Bestellt b, Produkt p
b.KNr = k.KNr
b.PNr = p.PNr
Bezeichnung = ‚Fiat Uno‘
Expansion der View:
select
from
where
and
and
and
Name
Kunden k, Bestellt b, Produkt p
b.KNr = k.KNr
b.PNr = p.PNr
Bezeichnung = ‚Fiat Uno‘
Saldo ≥ 300.000
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Übersetzung in relationale Algebra (kanonisch):
π Name (σ Saldo≥30000 (σ Bezeichung = 'FiatUno ' (σ b. PNr = p. PNr
(σ b. KNr = k . KNr (Pr odukt × ( Bestellt × Kunden)))))
π [Name]
σ [ Saldo ≥ 300.000]
σ [ Bezeichnung ='...' ]
σ [b.PNr = p.PNr ]
σ [b.KNr = k .KNr ]
x
8
Produkt
Bestellt
x
Kunden
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Kunden:
9
KNr
201
337
444
108
Name
Klein
Horn
Berger
W eiss
Adresse
Lilienthal
Dieburg
München
W ürzburg
Region
Bremen
Rhein-Main
München
Unterfranken
π [Name]
1
σ [ Saldo ≥ 300.000]
2
σ [ Bezeichnung ='...' ]
Bestellt:
Datum
10.05.04
11.05.04
20.05.04
13.05.04
14.05.04
BNr
221
312
401
456
458
Saldo
200.000
100.000
300.000
500.000
KNr
201
201
337
444
444
PNr
12
4
330
330
98
5
σ [b.PNr = p.PNr ]
25
σ [b.KNr = k .KNr ]
100
Produkt:
PNr
12
4
330
98
14
Bezeichnung
BMW 318i
Golf 5
Fiat Uno
Ferrari 380
Opel Corsa
Anzahl
10
40
5
1
14
Preis
40.000
25.000
18.000
180.000
17.000
5
x
Produkt
5
Bestellt
20
x
4
Kunden
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Beobachtungen:
10
• Der kanonische Auswertungsplan erzeugt das kartesische
Produkt der 3 Relationen
• Die Kardinalität des kartesischen Produkts ist
|Kunden| * |Bestellt| * |Produkt| = 100 Tupel
• Für jedes der 100 Tupel muss z.B. die Bedingung
b.KNr=k.KNr ausgewertet werden
• Günstiger wäre es z.B., wenn man sich gleich von Anfang
an auf das Produkt ‚Fiat Uno‘ und die Kunden mit hohem
Saldo beschränken würde:
Relationale Anfragebearbeitung
π [Name]
π [Name]
π [Name]
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
1
σ [ Saldo ≥ 300.000]
σ [b.PNr = p.PNr ]
2
σ [ Bezeichnung ='...' ]
σ [ Bezeichnung ='...' ]
1
x
2
5
σ [b.PNr = p.PNr ]
σ [b.PNr = p.PNr ]
25
σ [b.KNr = k .KNr ]
5
x
Produkt
5
11
1
σ [ Saldo ≥ 300.000]
σ [b.KNr = k .KNr ]
100
x
20
x
4
Bestellt Kunden
Produkt
σ [ Bezeichnung ='...' ] σ [b.KNr = k .KNr ]
5
Produkt
10
x
5
Bestellt
2
σ [ Saldo ≥ 300.000]
x
4
Kunden
Bestellt Kunden
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Relationale Anfragebearbeitung
12
• i.A. gibt es viele verschiedene, gleichwertige
Auswertungspläne für dieselbe Anfrage
• Die Performanz gleichwertiger Auswertungspläne variiert
häufig zwischen wenigen Sekunden (schnellster Plan) und
vielen Stunden (Standardplan)
• Die Aufgabe der Anfrageoptimierung ist es, den
günstigsten Auswertungsplan zu ermitteln (bzw.
zumindest einen sehr günstigen Plan zu ermitteln)
• Wegen des großen Unterschiedes zwischen günstigstem
und ungünstigstem Plan ist die Optimierung bei der relationalen Anfragebearbeitung wesentlich wichtiger als z.B.
bei der Übersetzung von (imperativen) Programmiersprachen
Relationale Anfragebearbeitung
Logische und physische Anfrageoptimierung:
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
•
•
Optimierungstechniken, die den Auswertungsplan betrachten und
„umbauen“ werden als logische Anfrageoptimierung bezeichnet
Physische Anfrageoptimierung: Auswahl einer geeigneten
Auswertungsstrategie für Join-Operationen oder Entscheidung, ob
für eine Selektionsoperation ein Index verwendet wird.
Beispiel: Auswertungsstrategien für Joins
•
•
•
Erzeuge alle Tupel des kartesischen Produkts und prüfe JoinBedingung (Nested Loop)
Sortiere beide Relationen nach dem Joinattribut und filtere
passende Paare (Sort Merge)
Betrachte alle Tupel der einen Relation und greife auf die
Joinpartner über einen passenden Index der anderen Relation zu
(Indexed Loop)
13
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
Regel- und kostenbasierte Optimierung
14
•
Es gibt zahlreiche Regeln (Heuristiken), um die
Reihenfolge der Operatoren im Auswertungsplan zu
modifizieren und so eine Performanz-Verbesserung zu
erreichen, z.B. Push Selection: Führe Selektionen
möglichst frühzeitig (vor Joins) aus
Optimierer, die sich ausschließlich nach solchen starren
Regeln richten, nennt man regelbasierte oder auch
algebraische Optimierer
Relationale Anfragebearbeitung
Datenbanksysteme I
Kapitel 10: Relationale Anfragebearbeitung
•
15
Optimierer, die die voraussichtliche Performanz von
Auswertungsplänen ermitteln werden als kostenbasierte
Optimierer bezeichnet. Die Vorgehensweise ist meist
folgende:
–
–
–
–
–
Generiere einen initialen Plan (z.B. Standardauswertungsplan)
Schätze bei der Auswertung entstehende Kosten
Modifizieren den aktuellen Plan gemäß vorgegebener
Heuristiken
Wiederhole die Schritte 2 und 3 bis ein Stop-Kriterium erreicht
ist
Gib den besten erhaltenen Plan aus
Als Kostenmaß eignen sich der Erwartungswert der
Antwortzeit (Einbenutzerbetrieb) oder die Belegung von
Ressourcen wie z.B. Anzahl zugegriffener Blöcke oder
CPU-Nutzung (Durchsatz-Optimierung va. im
Mehrbenutzerbetrieb)
Herunterladen