Выбор ответа Junior Django ORM и N+1 спрашивают часто обновлено

Что такое проблема N+1

Вопрос

Что такое проблема N+1 запросов?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Один запрос за списком и ещё по запросу на объект за связанными. Классический пример: цикл по заказам и обращение order.customer.name.

Варианты ответа

  1. Один запрос за списком и ещё по запросу на объект за связаннымиправильный ответ
  2. Запрос возвращает на одну строку больше, чем нужно странице пагинации
  3. База выполняет N+1 транзакций вместо одной при сохранении списка
  4. Ошибка пагинации: на странице оказывается N+1 элементов вместо N

Разбор

Классический пример: цикл по заказам и обращение order.customer.name. Первый запрос получает N заказов, а затем на каждый заказ выполняется запрос за клиентом. На 100 заказах это 101 запрос, и страница тормозит из-за сетевых задержек до БД. Лечится select_related или prefetch_related. С лишними строками, транзакциями и пагинацией проблема не связана.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.