Выбор ответа Junior EXPLAIN и оптимизация спрашивают часто обновлено
Проблема N+1
Вопрос
Страница списка из 50 статей делает 1 запрос за статьями и затем по 1 запросу за автором каждой статьи. Как это называется и как исправить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Проблема N+1; загрузить авторов одним запросом. Каждый из N дополнительных запросов быстрый, но вместе это 51 сетевой поход к базе, и время растёт с размером списка.
Варианты ответа
- Проблема N+1; добавить индекс на
authors.id - Декартово произведение; добавить DISTINCT в запрос
- Нормальное поведение ORM, исправлять не нужно
- Проблема N+1; загрузить авторов одним запросомправильный ответ
Разбор
Каждый из N дополнительных запросов быстрый, но вместе это 51 сетевой поход к базе, и время растёт с размером списка. Лечат загрузкой связанных данных пачкой: JOIN, один запрос по списку id (WHERE id = ANY($1)) или eager loading в ORM. Индекс на первичном ключе уже есть и число запросов не уменьшит. DISTINCT лечит дубли, а не число запросов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.