N+1 query probléma
Mi az N+1 query probléma, hogyan ismered fel API-ban vagy ORM-ben, és mikor segít JOIN, eager loading vagy batch lekérdezés?
Röviden
N+1 akkor alakul ki, amikor először lekérsz N elemet egy queryvel, majd minden elemhez külön új queryt indítasz. Kis tesztadaton és helyi adatbázissal észrevétlen lehet, production latency mellett viszont gyorsan megsokszorozza a round tripeket.
Mit jelent a n+1 query probléma?
N+1 akkor alakul ki, amikor először lekérsz N elemet egy queryvel, majd minden elemhez külön új queryt indítasz. Kis tesztadaton és helyi adatbázissal észrevétlen lehet, production latency mellett viszont gyorsan megsokszorozza a round tripeket.
1 + N körút
01
1 lista query
02
+ user 1
03
+ user 2
04
+ user N
05
batch/join
Hogyan működik a gyakorlatban?
A megoldás lehet JOIN, eager loading, batch `WHERE id IN (...)`, DataLoader-szerű batching vagy a response adatmodell áttervezése. Nem az a cél, hogy mindenáron egyetlen óriásquery legyen, hanem hogy kontrolláld a queryszámot és adatmennyiséget.
- Mérd requestenként a query countot.
- ORM logban keresd az ismétlődő, csak ID-ban eltérő queryket.
- Batching sokszor jó kompromisszum túl nagy join helyett.
- Pagination mellett különösen figyelj kapcsolódó kollekciók betöltésére.
Gyakorlati fejlesztői szemlélet
Egy listanézethez definiáld előre, mely kapcsolódó adat valóban kell. Ha 20 projektkártyán csak owner név látszik, ne töltsd be projektenként az owner teljes profilját és minden permissionjét külön körben.
Gyakori hibák és félreértések
- Az ORM-et hibáztatni a generated SQL megnézése nélkül.
- Minden kapcsolatot eager-loadolni minden oldalon.
- Csak adatbázis CPU-t mérni a hálózati round trip latency helyett.
Források és szabványok
A technikai részletekhez elsődleges szabványokat és karbantartott hivatalos dokumentációt használok. Frameworkök, böngészők és webes API-k idővel változhatnak, ezért implementálás előtt mindig ellenőrizd az aktuális dokumentációt is.
Kapcsolódó ByBence Academy