Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

N+1 Problem — detekce a řešení

01. 01. 2024 1 min čtení intermediate

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