Вопрос по batch()

Добрый день.

Насколько я понял, похожий вопрос уже поднимался в этой ветке.

Суть:

Код из документации по Batch Query:




use yii\db\Query;


$query = (new Query())

    ->from('user')

    ->orderBy('id');


foreach ($query->batch() as $users) {

    // $users is an array of 100 or fewer rows from the user table

}



При этом генерируется тот же запрос, что и при ->all(), т.е.:


SELECT * FROM `users`

При работе с большими таблицами на такое, естественно, памяти не хватает.

Или смысл batch() уже в порционной выдаче всего полученного результата из БД?

Смысл batch() насколько я понял действительно в пропорциональной выдаче. Но реализация немного сложнее чем просто


SELECT * FROM `users`



  1. Используется dataReader.

  2. Используется итератор.

Итого проблем с памятью не должно быть.