Использовал ли prefetch
Python
Junior
Без компании
Использовал ли prefetch
Ответы
`prefetch_related` в Django оптимизирует запросы для связанных объектов, уменьшая количество SQL-запросов. Он полезен для `ManyToMany` и `ForeignKey` отношений, загружая связанные данные одним запросом.
Пример:
```
# Без prefetch_related — N+1 проблема
books = Book.objects.all()
for book in books:
print(book.author.name) # Отдельный запрос для каждого автора
# С prefetch_related — 2 запроса
books = Book.objects.prefetch_related('author').all()
for book in books:
print(book.author.name) # Данные уже в кэше
```
**Отличие от `select_related`:**
- `select_related` работает для `ForeignKey` и `OneToOne`, используя `JOIN`.
- `prefetch_related` — для `ManyToMany` и обратных `ForeignKey`, выполняя отдельный запрос и объединяя результаты в Python.
**Важно:**
- Избегай избыточного префетчинга.
- Для кастомных менеджеров/кверисетов используй `Prefetch()` для тонкой настройки.