N+1 queries cause exponential database load as data scales
warningWhen Django code iterates over a queryset and accesses related objects (via ForeignKey, OneToOne, or ManyToMany) without eager loading, Django executes one query to fetch the initial objects plus one additional query per object to fetch related data. With 100 orders accessing customer data, this becomes 101 queries. At production scale with 1000+ records, this becomes 1001+ queries, causing severe API slowdown.
Use select_related() for ForeignKey or OneToOne relationships to fetch related objects in a single JOIN query. Use prefetch_related() for ManyToMany or reverse ForeignKey relationships to fetch in a separate optimized query. Example: Order.objects.select_related('customer') instead of Order.objects.all() when iterating. Implement NPlusOneDetectorMiddleware (THRESHOLD=5 default) in development to automatically detect repetitive query patterns.