Indizes in Datenbanken: Performance verbessern
Langsame Abfragen sind oft ein Index-Problem. Lerne, wie Datenbankindizes funktionieren, wann sie helfen und welche Kosten sie verursachen.
Wird deine Datenbank langsamer, je mehr Daten sie enthält? Sehr oft liegt das an fehlenden Indizes. Ein Index ist eine zusätzliche Datenstruktur, die deiner Datenbank hilft, Zeilen blitzschnell zu finden, statt jede einzeln zu prüfen. In diesem Beitrag lernst du, wie Indizes funktionieren und wie du sie sinnvoll einsetzt.
Das Telefonbuch-Prinzip
Stell dir vor, du suchst in einem Telefonbuch nach einem Namen. Weil es alphabetisch sortiert ist, findest du den Eintrag in Sekunden. Wäre es unsortiert, müsstest du jede Seite durchgehen. Genau das ist der Unterschied zwischen einer Abfrage mit und ohne Index. Ohne Index führt die Datenbank einen sogenannten "Full Table Scan" durch und prüft jede Zeile.
Einen Index anlegen
Indizes legst du mit dem Befehl CREATE INDEX an. Typischerweise indexierst du Spalten, nach denen du häufig filterst oder sortierst.
-- Index auf die Spalte 'email' der Tabelle 'kunden'
CREATE INDEX idx_kunden_email
ON kunden (email);
-- Abfragen auf email werden jetzt deutlich schneller
SELECT * FROM kunden
WHERE email = 'anton@example.com';Sucht die Datenbank jetzt nach einer E-Mail-Adresse, kann sie den Index nutzen, statt die ganze Tabelle zu durchsuchen.
Zusammengesetzte Indizes
Filterst du oft nach mehreren Spalten gleichzeitig, lohnt sich ein zusammengesetzter Index über mehrere Spalten. Die Reihenfolge der Spalten ist dabei wichtig.
-- Index über zwei Spalten
CREATE INDEX idx_bestellungen_kunde_datum
ON bestellungen (kunde_id, datum);
-- Profitiert vom Index
SELECT * FROM bestellungen
WHERE kunde_id = 42 AND datum > '2026-01-01';Als Faustregel gilt: Die Spalte mit der größten Auswahlkraft, also der größten Vielfalt an Werten, sollte zuerst stehen.
Den Abfrageplan prüfen
Ob deine Datenbank einen Index wirklich nutzt, verrät dir der Befehl EXPLAIN. Er zeigt den Ausführungsplan einer Abfrage an.
-- Zeigt, wie die Datenbank die Abfrage ausführt
EXPLAIN SELECT * FROM kunden
WHERE email = 'anton@example.com';Steht im Plan etwas wie "Index Scan", nutzt die Datenbank den Index. Taucht dagegen "Seq Scan" oder "Full Table Scan" auf, durchsucht sie die ganze Tabelle, ein Zeichen dafür, dass möglicherweise ein Index fehlt.
Die Kosten von Indizes
Indizes sind kein Allheilmittel, denn sie haben auch Nachteile, die du kennen solltest:
- Speicherplatz: Jeder Index belegt zusätzlichen Platz auf der Festplatte.
- Langsamere Schreibvorgänge: Bei jedem
INSERT,UPDATEoderDELETEmuss auch der Index aktualisiert werden. - Wartung: Zu viele oder unnötige Indizes machen die Datenbank unübersichtlich.
Lege deshalb nur Indizes an, die du wirklich brauchst, und nicht pauschal auf jede Spalte.
Wann sich ein Index lohnt
Ein Index ist besonders sinnvoll auf Spalten, die in WHERE-Bedingungen, JOIN-Klauseln oder ORDER BY vorkommen und viele unterschiedliche Werte enthalten. Auf einer Spalte wie geschlecht mit nur zwei Werten bringt ein Index dagegen wenig. Primärschlüssel sind übrigens automatisch indexiert, dort musst du dich um nichts kümmern.
Fazit
Indizes sind eines der mächtigsten Werkzeuge, um Datenbankabfragen zu beschleunigen. Sie wirken wie das alphabetische Register eines Telefonbuchs und vermeiden teure Full Table Scans. Lege sie gezielt auf häufig gefilterte Spalten, prüfe mit EXPLAIN, ob sie genutzt werden, und behalte die Kosten bei Schreibvorgängen im Blick. Mit der richtigen Index-Strategie bleibt deine Datenbank auch bei großen Datenmengen schnell.