Django select_related and prefetch_related for N+1 query optimization

4168
0

The N+1 query problem is Django's most common performance trap. I use select_related for foreign key and one-to-one relationships (performs SQL JOIN), and prefetch_related for many-to-many and reverse foreign keys (separate queries with Python join). The Django Debug Toolbar helps identify these issues early. For complex prefetches, I use Prefetch objects to customize the queryset, like adding ordering or filtering. This dramatically reduces query count from hundreds to single digits, making views fast even with large datasets.