Zuletzt aktualisiert am 04.12.2025 7 Minuten Lesezeit

Index (Datenbank)

Ein Datenbankindex ist eine spezielle Datenstruktur, die das Suchen und Sortieren von Daten in einer Datenbank erheblich beschleunigt. Du kannst dir einen Index wie das Stichwortverzeichnis in einem Buch vorstellen: Anstatt jede Seite durchzublättern, schaust du im Index nach und findest sofort die richtige Seitenzahl.

Ohne Index muss die Datenbank bei einer Suchanfrage jeden einzelnen Datensatz der Tabelle durchsuchen (Full Table Scan). Bei Millionen von Datensätzen kann das mehrere Sekunden dauern. Mit einem passenden Index reduziert sich die Suchzeit auf wenige Millisekunden.

Wie funktioniert ein Datenbankindex?

Ein Index besteht aus einer sortierten Liste von Spaltenwerten zusammen mit Zeigern (Pointern), die auf die entsprechenden Datensätze in der Tabelle verweisen. Die Datenbank kann so gezielt auf die relevanten Daten zugreifen, ohne die gesamte Tabelle zu durchsuchen.

B-Baum (B+-Baum)

Die meisten Datenbanksysteme wie MySQL und PostgreSQL verwenden B+-Bäume als Standardimplementierung für Indizes. Diese Baumstruktur ordnet die Daten hierarchisch an und ermöglicht eine logarithmische Suchkomplexität. Das bedeutet: Selbst bei einer Million Datensätzen sind nur etwa 20 Vergleiche nötig, um den gesuchten Wert zu finden.

Vorteile des B+-Baums:\n- Schnelle Suche bei Gleichheits- und Bereichsabfragen\n- Automatisches Ausbalancieren des Baums\n- Unterstützung für sortierte Ausgaben (ORDER BY)

Hash-Index

Eine Alternative ist der Hash-Index, bei dem die Spaltenwerte mit einer Hash-Funktion in eine Hash-Tabelle umgewandelt werden. Hash-Indizes sind extrem schnell bei direkten Gleichheitsabfragen (WHERE spalte = 'Wert'), unterstützen aber keine Bereichsabfragen (WHERE spalte > 100).

Arten von Datenbankindizes

Je nach Anwendungsfall gibt es verschiedene Index-Typen, die sich in ihrer Funktionsweise und ihrem Einsatzgebiet unterscheiden.

Primärindex (Primary Index)

Der Primärindex wird automatisch auf dem Primärschlüssel (Primary Key) erstellt. Er identifiziert jeden Datensatz eindeutig und wird von der Datenbank automatisch verwaltet. Bei den meisten Datenbanksystemen ist der Primärindex gleichzeitig ein Clustered Index.

Sekundärindex (Secondary Index)

Sekundärindizes werden manuell auf Spalten erstellt, die häufig in WHERE-Klauseln vorkommen. Im Gegensatz zum Primärindex können pro Tabelle mehrere Sekundärindizes existieren. Sie verweisen auf den Primärschlüssel oder direkt auf die Datensätze.

Clustered vs. Non-Clustered Index

Bei einem Clustered Index werden die Datensätze physisch in der Reihenfolge des Index-Schlüssels auf dem Datenträger gespeichert. Pro Tabelle kann es nur einen Clustered Index geben. Bei einem Non-Clustered Index bleibt die physische Speicherreihenfolge unverändert. Der Index enthält lediglich Zeiger auf die eigentlichen Daten.

Unique Index

Ein Unique Index stellt sicher, dass keine doppelten Werte in der indizierten Spalte vorkommen. Er verbindet die Performance-Vorteile eines Index mit einer Integritätsbedingung. Typische Anwendungsfälle sind E-Mail-Adressen oder Benutzernamen.

Composite Index (zusammengesetzter Index)

Ein Composite Index umfasst mehrere Spalten und ist besonders effektiv, wenn Abfragen regelmäßig nach einer Kombination von Spalten filtern. Die Reihenfolge der Spalten im Index ist entscheidend: Der Index wird von links nach rechts verwendet.

sql\n-- Composite Index auf nachname und vorname\nCREATE INDEX idx_name ON kunden(nachname, vorname);\n\n-- Dieser Index wird genutzt bei:\nSELECT * FROM kunden WHERE nachname = 'Müller';\nSELECT * FROM kunden WHERE nachname = 'Müller' AND vorname = 'Max';\n\n-- Dieser Index wird NICHT optimal genutzt bei:\nSELECT * FROM kunden WHERE vorname = 'Max';\n

Volltextindex (Full-Text Index)

Volltextindizes sind speziell für die Suche in Textfeldern optimiert. Sie ermöglichen natürlichsprachige Suchanfragen und finden auch Wörter innerhalb längerer Texte effizient. Typische Einsatzgebiete sind Produktbeschreibungen, Artikel oder Kommentare.

Index erstellen mit SQL

Die Erstellung eines Index erfolgt mit dem CREATE INDEX-Befehl. Die Syntax ist bei den meisten relationalen Datenbanksystemen ähnlich.

Einfachen Index erstellen

Ein einfacher Index auf eine einzelne Spalte beschleunigt Abfragen, die nach dieser Spalte filtern oder sortieren:

sql\n-- Index auf die Spalte 'email' erstellen\nCREATE INDEX idx_email ON benutzer(email);\n\n-- Unique Index (verhindert doppelte Werte)\nCREATE UNIQUE INDEX idx_unique_email ON benutzer(email);\n

Index löschen

Nicht mehr benötigte Indizes solltest du entfernen, da sie bei Schreiboperationen Overhead verursachen:

sql\n-- MySQL\nDROP INDEX idx_email ON benutzer;\n\n-- PostgreSQL\nDROP INDEX idx_email;\n

Abfrage-Analyse mit EXPLAIN

Mit dem EXPLAIN-Befehl kannst du prüfen, ob die Datenbank einen Index tatsächlich verwendet:

sql\n-- MySQL\nEXPLAIN SELECT * FROM benutzer WHERE email = 'test@example.com';\n\n-- PostgreSQL\nEXPLAIN ANALYZE SELECT * FROM benutzer WHERE email = 'test@example.com';\n

Achte in der Ausgabe auf den Zugriffstyp: Bei ref oder const wird ein Index verwendet. Bei ALL findet ein vollständiger Tabellenscan statt.

Wann solltest du einen Index erstellen?

Nicht jede Spalte braucht einen Index. Die Entscheidung hängt davon ab, wie die Tabelle genutzt wird.

Sinnvolle Anwendungsfälle

  • Spalten in WHERE-Klauseln: Häufig gesuchte Spalten profitieren stark von Indizes\n- JOIN-Bedingungen: Spalten, die für Tabellenverknüpfungen verwendet werden\n- ORDER BY und GROUP BY: Spalten, nach denen sortiert oder gruppiert wird\n- Fremdschlüssel: Beschleunigen referenzielle Integritätsprüfungen\n- Große Tabellen: Je mehr Datensätze, desto größer der Performance-Gewinn

Wann Indizes problematisch sind

  • Häufige Schreiboperationen: INSERT, UPDATE und DELETE werden langsamer, da der Index aktualisiert werden muss\n- Kleine Tabellen: Bei wenigen hundert Datensätzen ist ein Full Table Scan oft schneller\n- Spalten mit wenigen unterschiedlichen Werten: Ein Index auf eine Spalte mit nur 2-3 verschiedenen Werten (z.B. Geschlecht) bringt kaum Vorteile\n- Speicherplatz: Jeder Index benötigt zusätzlichen Speicher

Vor- und Nachteile von Indizes

Die Entscheidung für oder gegen einen Index ist immer ein Abwägen zwischen Leseleistung und Schreibleistung.

| Aspekt | Vorteil | Nachteil |\n|--------|---------|----------|\n| Leseoperationen | Drastische Beschleunigung von SELECT-Abfragen | - |\n| Schreiboperationen | - | INSERT, UPDATE, DELETE werden langsamer |\n| Speicherplatz | - | Zusätzlicher Speicherbedarf auf der Festplatte |\n| Sortierung | Clustered Index sortiert Daten automatisch | Neuorganisation bei Änderungen |\n| Datenintegrität | Unique Index verhindert Duplikate | Einschränkung beim Einfügen |

Als Faustregel gilt: Bei Tabellen mit vielen Lesezugriffen und wenigen Änderungen sind Indizes sehr vorteilhaft. Bei Tabellen mit häufigen Schreiboperationen solltest du Indizes sparsam einsetzen.

Praxisbeispiel: Kundendatenbank optimieren

Angenommen, du hast eine Kundentabelle mit einer Million Datensätzen. Ohne Index dauert eine Suche nach einer E-Mail-Adresse etwa 2-5 Sekunden. Mit Index reduziert sich die Zeit auf wenige Millisekunden.

sql\n-- Tabelle erstellen\nCREATE TABLE kunden (\n kunden_id INT PRIMARY KEY AUTO_INCREMENT,\n nachname VARCHAR(100),\n vorname VARCHAR(100),\n email VARCHAR(150),\n stadt VARCHAR(100),\n registriert_am DATE\n);\n\n-- Index für häufige E-Mail-Suchen\nCREATE UNIQUE INDEX idx_email ON kunden(email);\n\n-- Composite Index für Namenssuchen\nCREATE INDEX idx_name ON kunden(nachname, vorname);\n\n-- Index für Datumsbereichsabfragen\nCREATE INDEX idx_registriert ON kunden(registriert_am);\n

Diese Indizes optimieren typische Abfragen wie die Suche nach E-Mail-Adressen, Filterung nach Namen oder Zeiträumen.

Indizes in der Praxis

In der beruflichen Praxis begegnen dir Datenbankindizes überall dort, wo größere Datenmengen verarbeitet werden. Ob in einem ERP-System, einer E-Commerce-Plattform oder einer Webanwendung - die richtige Index-Strategie kann den Unterschied zwischen einer schnellen und einer langsamen Anwendung ausmachen.

Als Fachinformatiker für Anwendungsentwicklung wirst du regelmäßig SQL-Abfragen schreiben und optimieren. Das Verständnis von Indizes ist dabei essentiell, um performante Datenbankanwendungen zu entwickeln. Auch für Fachinformatiker für Systemintegration ist das Thema relevant, wenn es um die Administration und das Monitoring von Datenbankservern geht.

Quellen und weiterführende Links