При работе с большими наборами результатов я обычно выполняю пакеты, например:
$current = 0;
$batchSize = 1000;
while (true) {
$large_array = $db->fetchAll(sprintf("select * from user limit %s, %s", $current, $batchSize));
if (sizeof($large_array) == 0) {
break;
}
$current += sizeof($large_array);
foreach($large_array as $user){
echo $user['email'] . "\n";
}
}
Пока ваш код не пропускает память, вам не придется беспокоиться о том, какой метод используетбольше памятиС точки зрения производительности загрузка всего набора результатов в одном запросе, вероятно, происходит быстрее, хотя вы, вероятно, очень скоро достигнете предела памяти, поэтому производительность больше не является вашей проблемой.
Кстати, это относительно легко проверить самостоятельно, настроив скрипт, который измеряет время (и пиковую память) обоих фрагментов.Держу пари, они не будут сильно отличаться во времени.