N+1-Problem
Kurz: Das N+1-Problem entsteht, wenn ein Programm eine Abfrage für eine Liste stellt und danach für jedes der N Ergebnisse eine weitere Abfrage. Aus einer Abfrage werden so N+1.
Genauer: Ein Beispiel: 100 Beiträge laden (1 Abfrage) und dann für jeden Beitrag den Autor einzeln nachladen (100 Abfragen). Jede Abfrage ist für sich schnell, aber zusammen entsteht viel Netzwerk- und Wartezeit.
Im Detail
- Erkennen: Das Log zeigt viele fast gleiche Abfragen hintereinander. Tools für Abfrage-Zähler oder Tracing machen es sichtbar.
- Lösung 1: Ein
JOIN, der alles in einer Abfrage holt. - Lösung 2: Zwei Abfragen: erst die Liste, dann alle Autoren mit
WHERE id IN (…)und im Code zusammensetzen. - ORMs: Viele bieten „Eager Loading” (
include,with), um das gezielt zu steuern. - Maß: Weniger Abfragen sind nicht immer schneller. Messen statt raten.
Siehe auch: Connection Pooling