DjangoPostgreSQL

N+1 query pattern executes one query per object for related records

critical
performanceUpdated Mar 15, 2026(via Exa)
How to detect:

Code sends one query to get list of objects, then one additional query per object to fetch related record. At a million rows, generates 1 million+ database queries causing PostgreSQL overload.

Recommended action:

Use select_related() for ForeignKey/OneToOne JOINs to prefetch in single query. Use prefetch_related() for ManyToMany/reverse FK (generates one additional query for all related objects). Use Django Debug Toolbar in development to detect N+1 patterns early.