N+1 je nejčastější performance problém s ORM. Místo 1 dotazu pošlete 101 dotazů — a databáze trpí.
Problém¶
❌ N+1 — 1 + N dotazů¶
users = User.query.all() # 1 dotaz for user in users: print(user.orders) # N dotazů (1 per user!)
Řešení — eager loading¶
SQLAlchemy — joinedload¶
users = session.query(User).options(joinedload(User.orders)).all()
Django — select_related / prefetch_related¶
users = User.objects.prefetch_related(‘orders’).all()
Prisma — include¶
const users = await prisma.user.findMany({ include: { orders: true } });
Detekce¶
Django — django-debug-toolbar¶
SQLAlchemy — echo=True nebo sqlalchemy.engine logging¶
nplusone library (Python)¶
pip install nplusone
Klíčový takeaway¶
Eager loading (joinedload, prefetch_related, include). Detekce: debug toolbar, query logging.
databasen+1ormperformance