Встречается на собеседованиях • сегодня
Что такое оптимизация запросов в Django ORM
Оптимизация запросов в Django ORM — это процесс уменьшения количества SQL-запросов и их сложности для повышения производительности приложения. Основные методы:
- select_related() — жадная загрузка связанных объектов через ForeignKey или OneToOneField (JOIN в SQL).
python
# До: 2 запроса (автор + книга) # После: 1 запрос с JOIN books = Book.objects.select_related('author').all()
-
prefetch_related() — для ManyToManyField и обратных связей (отдельный запрос для связи).
python# Оптимизация для M2M authors = Author.objects.prefetch_related('books').all() -
only()/defer() — загрузка только нужных полей.
python# Только title и author_id Book.objects.only('title', 'author_id') -
annotate()/aggregate() — вычисления на уровне БД.
-
exists()/count() — вместо загрузки QuerySet.
Нюансы:
- Избегайте N+1 проблемы (множество запросов в цикле).
- Используйте
django-debug-toolbarдля анализа запросов. - Для сложных сценариев — сырые SQL или
.raw().
Пример N+1 проблемы:
python
# Плохо: N+1 запросов для авторов
books = Book.objects.all()
for book in books:
print(book.author.name) # Отдельный запрос для каждой книги
# Хорошо: 1 запрос
books = Book.objects.select_related('author').all()
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы