Ein SQL INDEX (deutsch: Datenbank-Index) ist eine Datenstruktur, die SELECT-Abfragen beschleunigt, indem sie den Zugriff auf Tabellenzeilen über Schlüsselwerte organisiert. Ohne Index muss die Datenbank die gesamte Tabelle durchsuchen (Full Table Scan); mit Index findet sie die passenden Zeilen über eine sortierte Struktur – meist einen B-Baum – in wenigen Schritten. Indizes sind kein Teil des SQL-Standards, werden aber von allen gängigen Datenbanksystemen angeboten: MySQL, MariaDB, PostgreSQL, SQL Server und Oracle.
Syntax von CREATE INDEX
Der wichtigste Befehl ist CREATE INDEX:
CREATE INDEX idx_nachname ON kunden (nachname);
Ein eindeutiger Index verhindert doppelte Werte und entspricht in Teilen einem Primärschlüssel-Verhalten:
CREATE UNIQUE INDEX idx_email ON kunden (email);
PostgreSQL unterstützt mehrere Index-Methoden: B-tree (Standard, für Gleichheit und Bereiche), Hash (nur Gleichheit), GiST, SP-GiST, GIN (für Arrays und Volltext) und BRIN (für sehr große, sortierte Tabellen). MySQL und MariaDB nutzen vor allem BTREE, HASH (nur Memory), FULLTEXT und SPATIAL.
Partielle und abdeckende Indizes
PostgreSQL erlaubt partielle Indizes, die nur einen Teil der Zeilen erfassen – nützlich, wenn das Prädikat stabil und selektiv ist:
CREATE INDEX idx_aktive ON kunden (nachname) WHERE aktiv = 1;
Mit INCLUDE lassen sich zusätzliche Spalten in den Index aufnehmen (abdeckender Index), sodass die Datenbank die Antwort komplett aus dem Index liefern kann:
CREATE INDEX idx_sitzung ON sitzungen (user_id) INCLUDE (letzter_zugriff);
Indizes verwalten
Indizes werden mit ALTER TABLE oder DROP INDEX geändert bzw. entfernt:
DROP INDEX idx_nachname ON kunden;
In MySQL lautet die Alternative ALTER TABLE kunden ADD INDEX idx_nachname (nachname). Indizes kosten Speicherplatz und verlangsamen INSERT-, UPDATE- und DELETE-Operationen, weil die Datenbank sie bei jeder Änderung mitpflegen muss – die Wahl der Spalten sollte daher wohlüberlegt sein.
Verwandte Grundlagen: Datenbank-Indizes (Konzept und Aufbau), SQL CREATE TABLE, B-Baum, Hash-Index. Den Ausführungsplan einer Abfrage untersucht SQL EXPLAIN; ob ein Index überhaupt genutzt wird, zeigt SQL ANALYZE mit aktuellen Statistiken.