von Markus Winand.

Anatomie eines SQL Indexes


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.

Clustered Indizes (SQL Server, MySQL/InnoDB)

SQL Server und MySQL (mit InnoDB) fassen den Begriff „Index“ etwas weiter und bezeichnen Tabellen, die nur aus einer Indexstruktur bestehen, als „Clustered Index“. In der Oracle Datenbank werden solche Tabellen als Index-Organized Table (IOT) bezeichnet.

Kapitel 5, „Daten-Cluster, beschreibt solche Tabellen ge­nauer und erklärt die Vor- und Nachteile im Detail.

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.

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 Heraus­for­der­ung zu begegnen: eine doppelt verkettete Liste und einen Suchbaum. Anhand dieser beiden Strukturen kann nahezu das gesamte Performance­ver­hal­ten einer Datenbank erklärt werden.

Wenn dir gefällt, wie ich die Dinge erkläre, wirst du meine Kurse lieben.

Inhalt

  1. Die Blätter — Eine doppelt verkettete Liste

  2. Der B-Tree — Ein ausbalancierter Baum

  3. Langsame Indizes, Teil I — Zwei Zutaten machen den Index langsam

Vorherige SeiteNächste Seite

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

„Use The Index, Luke!“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz | CC-BY-NC-ND 3.0 Lizenz