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.

Hinweis in eigener Sache

Ich lebe von SQL-Schulungen, SQL-Tuning und Beratung sowie dem Verkauf meines Buches „SQL Performance Explained“. Mehr auf winand.at.

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.

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 ist der SQL Renaissance Botschafter auf der Mission, Entwickler auf die Evolution von SQL im 21. Jahrhundert aufmerksam zu machen. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Nicht mit OFFSET blättern

Mehr info

Besuche meine Schwester-Seite!Seit SQL-92 hat sich einiges getan!

Die Use The Index, Luke! Tasse

Aufkleber, Bierdeckel, Bücher und Kaffeetassen. Alles was man beim Lernen braucht!

Zum Shop

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„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 und DSGVO | CC-BY-NC-ND 3.0 Lizenz