N+1 query problem causes exponential database load
criticalperformanceUpdated Mar 22, 2026(via Exa)
Technologies:
How to detect:
When fetching related objects in a loop without optimization, Django executes 1 query for the main objects plus 1 query per related object. For 100 orders with user relationships, this results in 101 queries (1 + 100) instead of a single optimized query, causing severe performance degradation.
Recommended action:
Use select_related() for foreign key relationships to perform SQL joins: Order.objects.select_related("user").all(). Use prefetch_related() for many-to-many and reverse foreign key relationships: Order.objects.prefetch_related("items").all(). This reduces multiple queries to one or a small efficient set.