Databases Reference
In-Depth Information
Auch wenn es uns vielleicht nicht ganz bewusst ist: Wir haben mit Hilfe der Re-
lationenalgebra einfache Umformungen durchgeführt und außerdem die statisti-
sche Verteilung der Reihen in
reihen
berücksichtigt. Genauso verfährt der Opti-
mierer, eine Komponente des RDBMS. Der Optimierer
wertet statistische Informationen über den Datenbestand aus und
führt mit Hilfe der Relationenalgebra Umformungen der SQL-Anweisung
durch.
Das Ziel des Optimierers ist es dabei, einen möglichst schnellen und den ver-
fügbaren Ressourcen angemessenen Weg zur Ausführung der SQL-Anweisung
zu finden. Dieser Weg wird auch
Abfrageplan
genannt. Auch wenn die grund-
sätzliche Vorgehensweise eines Optimierers bekannt ist, wird ein erheblicher Teil
der Funktionsweise von den Herstellern kommerzieller Datenbanksoftware nicht
publiziert. Vielfach kann man dem Optimierer aber bei der Arbeit zuschauen,
und H2 ist da keine Ausnahme. Nach einigen Vorbereitungen werden wir wie-
der selbst Versuche durchführen.
Wir legen in unserer Tabelle
konten
(siehe Abschnitt 20.5) eine neue Spalte an:
alter table konten add column zaehler int;
Der Spalte
zaehler
weisen wir die gleichen Werte wie dem Primärschlüssel zu:
update konten set zaehler = id
Wenn wir einige Millionen Datensätze in die Tabelle eingefügt haben, kann eine
Anweisung wie
select
*
from konten where zaehler=4711
schon ein paar Sekunden dauern.
Den Grund dafür erfahren wir, wenn wir uns den Abfrageplan, der ein Teilergeb-
nis der Untersuchungen des Optimierers ist, anschauen. In H2 erhalten wir einen
sehr rudimentären Plan, wenn wir der
select
-Anweisung einfach das Schlüssel-
wort
explain analyze
voranstellen. Wenn unsere Tabelle 1.048.577 Datensätze
enthält, dann sieht das Ergebnis der Anweisung
explain analyze
select
*
from konten
where zaehler=4711
wie folgt aus:
select
konten.id,
konten.saldo,
konten.zaehler