Встречается на собеседованиях • сегодня

Что такое оптимизация запросов в Django ORM

Оптимизация запросов в Django ORM — это процесс уменьшения количества SQL-запросов и их сложности для повышения производительности приложения. Основные методы:

  1. select_related() — жадная загрузка связанных объектов через ForeignKey или OneToOneField (JOIN в SQL).
    python
    # До: 2 запроса (автор + книга)
    # После: 1 запрос с JOIN
    books = Book.objects.select_related('author').all()
  1. prefetch_related() — для ManyToManyField и обратных связей (отдельный запрос для связи).

    python
    # Оптимизация для M2M
    authors = Author.objects.prefetch_related('books').all()
  2. only()/defer() — загрузка только нужных полей.

    python
    # Только title и author_id
    Book.objects.only('title', 'author_id')
  3. annotate()/aggregate() — вычисления на уровне БД.

  4. 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()
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы