EMZETT.
Login

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