> Сколько SQL-запросов выполняется при использовании join в Django ORM (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: ИВИ

Стек: Python

> Пример ответа

По умолчанию Django ORM при использовании select_related выполняет один SQL-запрос с JOIN. Например:

PYTHON
# Модели: Book -> Author (ForeignKey)
books = Book.objects.select_related('author').all()

Превращается в один запрос с LEFT OUTER JOIN (или INNER JOIN, если поле NOT NULL).

Без select_related Django выполнит N+1 запросов: один на получение книг, и по одному на каждую связанную запись автора.

Для prefetch_related (ManyToMany, обратные связи) выполняется два запроса: первый для основной модели, второй для связанной, после чего связь собирается в Python.

Таким образом, ответ зависит от метода оптимизации:

  • select_related - 1 запрос (JOIN).
  • prefetch_related - 2 запроса (без JOIN).
  • Без оптимизации - N+1 запросов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью