„Ein Index macht die Abfrage schnell“ ist die einfachste Beschreibung, die ich jemals für einen Datenbank-Index gehört habe. Obwohl sie seine wichtigste Eigenschaft gut erfasst, ist diese Erklärung für dieses Buch nicht ausreichend. Dieses Kapitel beschreibt die Struktur eines Indexes daher etwas genauer, ohne sich dabei in Details zu verlieren. Es gibt gerade genügend Einblick, um die Performanceaspekte im weiteren Verlauf des Buches zu verstehen.
Ein Index ist eine selbständige Datenstruktur, die mit dem create index
-Kommando angelegt wird. Er benötigt seinen eigenen Speicherplatz und besteht hauptsächlich aus redundanten Informationen, die aus der Tabelle in den Index übernommen werden. Das Anlegen eines neuen Indexes ändert den Tabelleninhalt nicht. Es wird lediglich eine neue Datenstruktur angelegt, die auf die Tabellendaten verweist. Ein Datenbank-Index ähnelt also dem Index am Ende eines Buches: Er hat seinen eigenen Speicherplatz, besteht großteils aus Redundanzen und verweist auf die eigentliche Information, die an einer anderen Stelle gespeichert ist.
Die Suche in einem Datenbankindex entspricht am ehesten der Suche in einem gedruckten Telefonbuch. Das Grundkonzept ist, dass die Einträge in einer wohldefinierten Reihenfolge vorliegen. Wenn die Daten sortiert sind, kann man einzelne Einträge schnell finden, da sich die Position des Eintrags aus der Sortierreihenfolge ergibt.
Hinweis in eigener Sache
Ich biete SQL Schulungen, Optimierung und Beratung an. Auch der Kauf meines Buches „SQL Performance Explained“ (ab €9,95) unterstützt meine Arbeit an dieser Webseite.
Ein Datenbankindex ist dennoch etwas komplexer als ein Telefonbuch, da er ständig aktualisiert wird. Bei einem Telefonbuch wäre es unmöglich, jede Aktualisierung sofort durchzuführen. Schon alleine deshalb nicht, weil zwischen zwei bestehenden Einträgen kein Platz für einen neuen ist. Daher werden die gesammelten Änderungen bei einem Telefonbuch erst mit dem nächsten Druck berücksichtigt. Solange kann eine SQL-Datenbank aber nicht warten. Jede insert
-, delete
- und update
-Anweisung muss sofort durchgeführt werden und dabei die Indexreihenfolge wahren.
Die Datenbank kombiniert zwei Datenstrukturen, um dieser Herausforderung zu begegnen: eine doppelt verkettete Liste und einen Suchbaum. Anhand dieser beiden Strukturen kann nahezu das gesamte Performanceverhalten einer Datenbank erklärt werden.