Query-Optimierung ist der Prozess, mit dem eine Datenbank aus einer SQL-Anfrage den effizientesten Ausführungsplan auswählt. Moderne Systeme schätzen dafür die Kosten verschiedener Pläne und wählen den günstigsten — ohne dass der Entwickler die Abfrage umschreiben muss.

Der Cost-Based Optimizer

Der Query-Optimierer vergleicht mögliche Pläne anhand geschätzter Kosten (CPU-Zeit, Platten-I/O, Speicher). Grundlage sind Statistiken über die Tabellen: Zeilenzahlen, Verteilungen und Index-Selektivität. Daraus schätzt er die Kardinalität — wie viele Zeilen ein Zwischenschritt voraussichtlich liefert. Schlechte oder veraltete Statistiken führen zu schlechten Plänen; deshalb sollten sie regelmäßig aktualisiert werden.

Klassische Optimierungstechniken

  • Join-Reihenfolge: Kleine Tabellen zuerst — der Optimierer sortiert die Verbindungsreihenfolge nach geschätzter Selektivität.
  • Index-Nutzung: Passende Indizes verwandeln komplette Tabellenscans in gezielte Zugriffe.
  • Predicate Pushdown: Filter werden möglichst früh angewendet, damit weniger Zeilen durch die Pipeline laufen.
  • Partition Pruning: Bei partitionierten Tabellen werden nur die relevanten Bereiche gelesen.
  • Query Rewrite: Die Anfrage wird in eine äquivalente, günstigere Form überführt — und kann auf materialisierte Sichten umgeleitet werden.

Von der Theorie zur Praxis

Zeigt der Ausführungsplan (EXPLAIN) einen teuren Sequential Scan oder eine ungünstige Join-Reihenfolge, hilft meist eine Kombination: passende Indizes anlegen, Statistiken aktualisieren, Abfragen vereinfachen oder für sehr aufwendige Auswertungen auf vorberechnete Strukturen wie materialisierte Sichten setzen. Gerade im OLTP- und Data-Warehouse-Betrieb entscheidet die Query-Optimierung über den Unterschied zwischen Sekundenbruchteilen und minutenlangen Wartezeiten.

Verwandte Grundlagen: Ausführungsplan (EXPLAIN), Materialisierte Sicht, Datenbank-Indizes, SQL, Spaltenorientierte Datenbank.