Выбор ответа Junior EXPLAIN и оптимизация спрашивают часто обновлено

Проблема N+1

Вопрос

Страница списка из 50 статей делает 1 запрос за статьями и затем по 1 запросу за автором каждой статьи. Как это называется и как исправить?

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

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

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

Коротко

Правильный ответ: Проблема N+1; загрузить авторов одним запросом. Каждый из N дополнительных запросов быстрый, но вместе это 51 сетевой поход к базе, и время растёт с размером списка.

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

  1. Проблема N+1; добавить индекс на authors.id
  2. Декартово произведение; добавить DISTINCT в запрос
  3. Нормальное поведение ORM, исправлять не нужно
  4. Проблема N+1; загрузить авторов одним запросомправильный ответ

Разбор

Каждый из N дополнительных запросов быстрый, но вместе это 51 сетевой поход к базе, и время растёт с размером списка. Лечат загрузкой связанных данных пачкой: JOIN, один запрос по списку id (WHERE id = ANY($1)) или eager loading в ORM. Индекс на первичном ключе уже есть и число запросов не уменьшит. DISTINCT лечит дубли, а не число запросов.

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

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

Термины по теме