Список из 100 заказов дал 101 запрос в БД
Страница выводит 100 последних заказов, в шаблоне для каждого показывается имя клиента: $order->client->name. В логе запросов на одну загрузку страницы видно 101 запрос: один к orders и сотня однотипных к clients по одному id.
В чём причина и что с этим делают?
- Связь подгружается лениво при первом обращении внутри цикла; предзагрузка связи сводит выборку к двум запросам
- Не хватает индекса по orders.client_id: без него ORM делает отдельный запрос на каждую строку, с индексом останется один запрос
- ORM открывает отдельное соединение на каждую загруженную модель; поможет постоянное соединение с БД и увеличение пула
- БД не кэширует план однотипных запросов и разбирает каждый заново; поможет увеличение пула соединений
