В соответствии с документами я использую реализацию Yii2 ActiveRecord в (надеюсь) точно так, как она должна использоваться.
проблема
В довольно простой настройке с простыми отношениями между таблицами, получение 10 результатов выполняется быстро, 100 - медленно. 1000 невозможно. База данных чрезвычайно мала и отлично индексируется. Проблема - это, конечно, Yii2 способ запросить данные, а не сам db.
Я использую стандартный ActiveDataProvider, например:
$provider = new ActiveDataProvider([
'query' => Post::find(),
'pagination' => false // to get all records
]);
Что я подозреваю
Отладка с помощью панели инструментов Yii2 показала тысячи одиночных SELECT для простого запроса, который должен просто получить 50 строк из таблицы A с помощью некоторых простых "JOINs" в таблицу B в таблицу C. В простом SQL все решат это с помощью одного оператора SQL и двух соединений, Однако Yii2 запускает SELECT для каждого отношения в каждой строке (что имеет смысл сохранить ORM в чистоте). Результат (более или менее) 1 * 50 * 30 = 1500 запросов для получения двух отношений каждой строки.
Вопрос
Почему Yii2 использует так много одиночных SELECT, или это ошибка на моей стороне? Кроме того, кто-нибудь знает, как "исправить" это?
Поскольку это очень важный вопрос для меня, я дам 500 баунти 14 мая.