CodeGym /Kurse /SQL SELF /Einführung in Indizes

Einführung in Indizes

SQL SELF
Level 37 , Lektion 0
Verfügbar

Du bist bestimmt schon mal über Indizes gestolpert. Lass uns heute mal richtig tief eintauchen, damit du alle Feinheiten ihrer Funktionsweise verstehst. Indizes sind echt genial, sie können deine Abfragen um ein Vielfaches schneller machen – manchmal sogar um das Hundert- oder Tausendfache. Du wirst sie lieben. Aber was sind Indizes eigentlich?

Stell dir vor, du suchst ein bestimmtes Buch in einer riesigen Bibliothek. Ohne irgendeine Suchordnung würde das ewig dauern. Um das Ganze zu beschleunigen, sind Bücher meistens alphabetisch oder nach Kategorien sortiert. Ein Index in einer Datenbank funktioniert nach dem gleichen Prinzip.

Formal ist ein Index eine spezielle zusätzliche Datenstruktur, die für das schnelle Finden von Zeilen in einer Tabelle erstellt wird. Er reduziert die Menge an Daten, die du durchsuchen musst, um die gewünschte Info zu finden.

In gewisser Weise sind Indizes wie das Inhaltsverzeichnis in einer Enzyklopädie, wenn du dir das Buch als Tabelle vorstellst.
Anstatt die ganze Enzyklopädie von vorne bis hinten zu lesen, nutzt du das Inhaltsverzeichnis, um direkt zur richtigen Seite zu springen.

Stell dir vor, die Tabelle employees enthält 100.000 Mitarbeitende. Wenn du nach einer Person mit dem Nachnamen "Min" suchst, musst du ohne Index jeden einzelnen Eintrag durchgehen (das dauert). Mit Index geht das viel schneller, weil Postgres weiß, wo es suchen muss.

Wie funktionieren Indizes?

Um zu verstehen, wie Indizes Abfragen beschleunigen, musst du wissen, was sie hinter den Kulissen machen. Ein Index wird auf Basis einer oder mehrerer Tabellenspalten erstellt und organisiert die Daten in einer suchfreundlichen Struktur.

Indizes in PostgreSQL nutzen meistens die Datenstruktur B-Tree (balancierter Baum). So läuft das ab:

  1. Index wird erstellt: Die Daten aus den Spalten, für die der Index erstellt wird, werden in einen Baum organisiert.
  2. Beim Suchen: PostgreSQL nutzt den Index, um die gewünschten Zeilen schnell zu finden, statt die ganze Tabelle zu scannen.
  3. Baumstruktur: Der Baum ist sortiert, was schnelle Sprünge von einem Eintrag zum nächsten ermöglicht (binäre Suche).

Beispiel: Angenommen, wir haben eine Tabelle mit 1 Million Zeilen. Ohne Index musst du eine Million Einträge prüfen. Mit Index kann PostgreSQL die Suche auf ein paar Dutzend reduzieren.

Wann solltest du Indizes verwenden?

Indizes machen Leseoperationen wie Suchen, Filtern, Sortieren deutlich schneller. Dafür zahlst du aber mit langsameren Schreiboperationen (wie INSERT, UPDATE, DELETE), weil der Index bei jeder Datenänderung aktualisiert werden muss.

Szenarien, in denen Indizes ein Muss sind

Häufige Suchabfragen: Wenn du oft nach bestimmten Werten suchst, zum Beispiel:

SELECT * FROM employees WHERE last_name = 'Min';

Daten filtern: Wenn du Bedingungen in WHERE oder HAVING verwendest:

SELECT * FROM employees WHERE salary > 50000;

Daten sortieren: Wenn du ORDER BY nutzt:

SELECT * FROM employees ORDER BY hire_date DESC;

Tabellen verbinden (JOIN): Wenn du oft Tabellen auf Basis bestimmter Spalten zusammenführst.

*Wann *SOLLTEST du KEINE Indizes verwenden

  • Wenn die Tabelle sehr klein ist (sagen wir, 10-50 Zeilen), bringt ein Index kaum einen spürbaren Vorteil.
  • Wenn die Spalte, auf der der Index liegt, selten in Abfragen verwendet wird.
  • Wenn die Daten in der Spalte nur sehr wenige unterschiedliche Werte haben (zum Beispiel das Feld gender, das nur 2-3 Werte annimmt).

Beispiel: Einen Index auf das Feld status zu legen, das nur zwei mögliche Werte hat – "aktiv" und "inaktiv" – macht keinen Sinn.

Einfluss von Indizes auf die Performance

Wie du schon gemerkt hast, machen Indizes Leseabfragen schneller, können aber Schreiboperationen verlangsamen. Der Grund: Beim Hinzufügen, Aktualisieren oder Löschen von Zeilen muss PostgreSQL auch die Infos im Index anpassen.

Balance zwischen Indexeinsatz und Performance

  • Bei Tabellen, die sich oft ändern, solltest du mit der Anzahl der Indizes vorsichtig sein.
  • Bei Tabellen, bei denen hauptsächlich gelesen wird, sind Indizes Pflicht.

Nutzen von Indizes im echten Leben

In der Praxis werden Indizes häufig verwendet für:

  1. Optimierung von Webanwendungen: Schnellere Ladezeiten durch flotte SQL-Abfragen.
  2. Arbeiten mit großen Tabellen: Ohne Indizes können Abfragen auf Tabellen mit Millionen Zeilen Minuten dauern.
  3. Skalierbarkeit: Indizes machen es möglich, auch große Datenmengen effizient zu verarbeiten.

Zum Beispiel: Ein Online-Shop mit einer Datenbank für Produkte und Bestellungen kommt ohne Indizes nicht aus – sonst würden die Kund:innen ewig auf das Laden der Seiten warten.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION