Какие есть методы оптимизации запросов в Django
Python
Middle
Без компании
Какие есть методы оптимизации запросов в Django
Ответы
- **select_related** – для оптимизации ForeignKey и OneToOneField, выполняет JOIN в SQL.
```
queryset = Book.objects.select_related('author') # Снижает количество запросов
```
- **prefetch_related** – для ManyToManyField и обратных связей, загружает связанные объекты отдельным запросом.
```
queryset = Author.objects.prefetch_related('books')
```
- **only() и defer()** – загружают только указанные поля или откладывают загрузку тяжелых полей.
```
queryset = Book.objects.only('title', 'author__name')
```
- **annotate() и aggregate()** – вычисления на уровне БД, а не в Python.
- **Использование индексов** – добавление `db_index=True` для часто фильтруемых полей.
- **Кэширование** – `@cache_page`, `cache.set()/get()` для повторяющихся запросов.
- **limit() и pagination** – уменьшение объема данных за раз.
- **Оптимизация raw SQL** – для сложных запросов, но с осторожностью.
- **connection.queries** – отладка запросов в dev-режиме.
- **django-debug-toolbar** – инструмент для анализа запросов.