Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Warum eine Abfrage schnell oder langsam ist

Nach dieser Lektion: Ich kann erklären, wie ein Index eine Abfrage schneller macht.

Lektion, 45 Min.Keine Befehle

Drei Sekunden zu viel

Nordwind Rad ist gewachsen. Die Tabelle der Bestellungen hat zwei Millionen Zeilen. Im Support sucht jemand eine Bestellung über die E-Mail-Adresse, und die Seite lädt drei Sekunden lang.

Die Abfrage ist richtig, nur langsam. In einem technischen Team hören Sie dann das Wort Index. Diese Lektion erklärt, was es bedeutet.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie ein Index eine Abfrage schneller macht.

Schlüsselwörter

BegriffWas er bedeutet
Indexeine sortierte Liste einer Spalte mit Verweisen auf die Zeilen
SCANdie Datenbank liest jede Zeile der Tabelle
SEARCHdie Datenbank geht gezielt zur gesuchten Zeile
Abfrageplander Weg, den die Datenbank für eine Abfrage wählt
EXPLAIN QUERY PLANzeigt den Abfrageplan, ohne die Abfrage auszuführen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ohne Index liest die Datenbank alles

Sie suchen in einem Telefonbuch, das nicht sortiert ist, eine Nummer. Sie müssen jede Seite lesen, bis Sie sie finden.

Eine Datenbank ohne Index macht das Gleiche. Sie liest Zeile für Zeile. Das heißt SCAN. Bei sechs Zeilen merkt das niemand. Bei zwei Millionen dauert es.

Ein Index ist wie das Register eines Buches

Ein Buch hat hinten ein Register. Die Wörter stehen dort in Reihenfolge, mit der Seitenzahl daneben. Sie finden ein Wort in Sekunden.

Ein Index ist so ein Register für eine Spalte. Die Werte stehen sortiert da, mit einem Verweis auf die Zeile. Weil sie sortiert sind, schließt die Datenbank bei jedem Schritt etwa die Hälfte aus. Echte Datenbanken nutzen dafür eine Baumstruktur. Die Schritte unten sind vereinfacht.

Ein Beispiel: Wie viele Schritte braucht die Suche?

Zeilen in der TabelleSCAN, höchstensMit Index, etwa
10001000 Schritte10 Schritte
1.000.0001.000.000 Schritte20 Schritte
2.000.0002.000.000 Schritte21 Schritte

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

EXPLAIN QUERY PLAN zeigt den gewählten Weg

Sie können die Datenbank fragen, wie sie antworten wird. Schreiben Sie EXPLAIN QUERY PLAN vor die Abfrage. Sie liefert dann keine Bestellungen, sondern ihren Plan.

SCAN heißt: die ganze Tabelle lesen. SEARCH ... USING INDEX heißt: über einen Index gehen. Starten Sie die zwei Blöcke und vergleichen Sie.

Probieren Sie es: der Plan ohne Index

Code: sql
-- Wie sucht die Datenbank diese Kundin?
EXPLAIN QUERY PLAN
SELECT * FROM bestellungen WHERE email = '[email protected]';

-- Lesen Sie die Spalte detail: SCAN heißt, die ganze Tabelle wird gelesen.

Probieren Sie es: der Plan mit Index

Code: sql
-- Wir legen einen Index auf die Spalte email an.
CREATE INDEX idx_bestellungen_email ON bestellungen(email);

-- Dieselbe Frage wie vorher.
EXPLAIN QUERY PLAN
SELECT * FROM bestellungen WHERE email = '[email protected]';

-- Jetzt steht dort SEARCH ... USING INDEX.

Ein häufiger Fehler

Warnung

Viele glauben, man solle einfach alle Spalten indizieren. Das stimmt nicht. Jeder Index braucht Platz, und jede neue oder geänderte Zeile muss ihn mit aktualisieren. Zu viele Indizes bremsen das Speichern neuer Bestellungen. Indizieren Sie Spalten, nach denen Sie oft in WHERE oder JOIN suchen.

Sie sind dran: Index auf die Stadt

Code: sql
-- Der Vertrieb sucht oft nach Stadt.
EXPLAIN QUERY PLAN
SELECT * FROM bestellungen WHERE stadt = 'Bremen';

-- Schreiben Sie hier ein CREATE INDEX für die Spalte stadt,
-- kopieren Sie darunter die EXPLAIN-Abfrage und starten Sie noch einmal.

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.