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: Die zweite Macht der Indizierung, 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.

Schnelle Antwort statt langer Suche!
Instant Coaching ist das Online Beratungsservice vom Autor dieser Seite.

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.

Recent Questions at Ask.Use-The-Index-Luke.com

0
votes
1
answer
228
views

query regd the CBO decision

Apr 17 at 10:27 Hulda(suspended)
index-choice optimizer
0
votes
3
answers
2.0k
views

Examples for Function Based Indexes?

Mar 25 at 15:52 Castorp 1
function-based
0
votes
1
answer
607
views

Updating multiple rows using a subquery in SQL

Jan 08 at 09:52 Jan 26
subquery update sql