Вступить в клуб →
лёгкаявопросSQL и оптимизация запросов

Список из 100 заказов дал 101 запрос в БД

Страница выводит 100 последних заказов, в шаблоне для каждого показывается имя клиента: $order->client->name. В логе запросов на одну загрузку страницы видно 101 запрос: один к orders и сотня однотипных к clients по одному id.

В чём причина и что с этим делают?

  • Связь подгружается лениво при первом обращении внутри цикла; предзагрузка связи сводит выборку к двум запросам
  • Не хватает индекса по orders.client_id: без него ORM делает отдельный запрос на каждую строку, с индексом останется один запрос
  • ORM открывает отдельное соединение на каждую загруженную модель; поможет постоянное соединение с БД и увеличение пула
  • БД не кэширует план однотипных запросов и разбирает каждый заново; поможет увеличение пула соединений

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела