Какие есть методы оптимизации запросов в 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** – инструмент для анализа запросов.