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

Abfrageplan mit EXPLAIN lesen

Nach dieser Lektion: Ich kann einen Abfrageplan mit EXPLAIN lesen und sagen, warum eine Abfrage weniger Arbeit macht als eine andere.

Lektion, 55 Min.Keine Befehle

Was zeigt ein Abfrageplan?

Ein Abfrageplan zeigt, in welchen Schritten eine Datenbank eine SQL-Abfrage ausführt. Mit dem Wort EXPLAIN lassen Sie ihn anzeigen.

So sehen Sie, wie viel Arbeit eine Abfrage macht, und können sagen, warum eine Schreibweise günstiger ist als eine andere.

Am Ende dieser Lektion

Notiz

Ich kann einen Abfrageplan mit EXPLAIN lesen und sagen, warum eine Abfrage weniger Arbeit macht als eine andere.

Schlüsselwörter

BegriffWas er bedeutet
Abfrageplandie Schritte, in denen eine Datenbank eine Abfrage ausführt
EXPLAINzeigt den Plan, ohne die Abfrage auszuführen
Scander Schritt, der eine Tabelle liest
Filterder Schritt, der Zeilen nach einer Bedingung behält
Joinder Schritt, der Zeilen zweier Tabellen paart

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

Explain zeigt die Schritte statt des Ergebnisses

Setzen Sie explain vor eine Abfrage. Die Datenbank führt sie nicht aus, sondern zeigt ihren Abfrageplan.

Der Plan ist eine Reihe von Kästen. Ganz oben steht das Ergebnis, ganz unten stehen die Tabellen. Die Daten fließen von unten nach oben.

Wie die Kästen aussehen, hängt von der Ansicht und der Version ab. Die Schritte sind dieselben.

Die Schritte, die Sie am häufigsten sehen

Schritt im PlanWas er tut
Scan (Seq Scan)Liest eine Tabelle, oft nur die benannten Spalten
Filters im Scan oder FilterBehält Zeilen, die die Bedingung erfüllen
Join (Hash Join)Paart Zeilen zweier Tabellen über einen Schlüssel
Group By (Aggregate)Fasst Zeilen zusammen und rechnet sum oder count
ProjectionWählt aus, welche Spalten weitergehen

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

Probieren Sie es: einen Plan ansehen

Code: duckdb
-- Der Plan zeigt die Schritte, die Ausführung liefert keine Zeilen.
explain
select kunde_id, sum(betrag_euro) as summe
from bestellungen
where jahr = 2026
group by kunde_id;
-- Streichen Sie die Zeile mit where und vergleichen Sie die Boxen.

Ein Join braucht zwei Scans

Bei einem Join liest der Plan beide Tabellen. Danach paart ein Join-Schritt die Zeilen, deren Schlüssel gleich sind.

Der Join arbeitet mit allen Zeilen, die aus den Scans kommen. Je weniger das sind, desto weniger hat er zu tun.

Suchen Sie im Plan darum nach dem Ort der Bedingung: Steht sie schon im Scan oder erst nach dem Join?

Probieren Sie es: den Plan eines Joins

Code: duckdb
-- Ein Join braucht zwei Scans und einen Schritt, der die Zeilen paart.
explain
select kunden.name, sum(bestellungen.betrag_euro) as summe
from bestellungen
join kunden on kunden.id = bestellungen.kunde_id
where bestellungen.jahr = 2026
group by kunden.name;

Ein häufiger Fehler

Warnung

Viele glauben, explain führe die Abfrage aus und zeige das Ergebnis. Es zeigt nur den Plan, die Zeilen kommen nicht. Wollen Sie das Ergebnis, lassen Sie explain weg.

Erst filtern macht den Join kleiner

Von acht Bestellungen stammen fünf aus 2026. Filtern Sie zuerst, hat der Join nur fünf Zeilen zu paaren statt acht.

DuckDB schiebt einfache Bedingungen oft selbst in den Scan. Dann zeigt der Plan Filters schon dort, und beide Schreibweisen sehen gleich aus.

Schreiben Sie den Filter trotzdem zuerst: Die Abfrage ist leichter zu lesen, und nicht jede Bedingung lässt sich verschieben.

Probieren Sie es: erst filtern, dann verbinden

Code: duckdb
-- Erst filtern, dann verbinden: die Form ist klar zu lesen.
with b2026 as (
  select kunde_id, betrag_euro
  from bestellungen
  where jahr = 2026
)
select kunden.name, sum(b2026.betrag_euro) as summe
from b2026
join kunden on kunden.id = b2026.kunde_id
group by kunden.name
order by kunden.name;
-- Ändern Sie 2026 in 2025: Wer hat dann Bestellungen?

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.