Что быстрее fetch_all и foreach или fetch_assoc и while?

Для теста я буду использовать mysqli. Думаю с pdo будут такие же результаты.

Использую mysql 8 и php 7.4.5

Для while и fetch_array:

$sql = "SELECT * FROM `products` LIMIT 1000000";
$result = $db->query($sql);

$time1 = microtime(true);
while ($res = $result->fetch_array()) {
    echo 1;
}
$time2 = microtime(true);
$time = $time2 - $time1;
echo PHP_EOL . 'При использовании while и fetch_array время: ' . $time . PHP_EOL;

Для fetch_all и foreach:

$sql = "SELECT * FROM `products` LIMIT 1000000";
$result = $db->query($sql);

$time1 = microtime(true);
$result = $result->fetch_all();
foreach ($result as $res) {
    echo 1;
}
$time2 = microtime(true);
$time = $time2 - $time1;
echo PHP_EOL . 'При использовании fetch_all время: ' . $time . PHP_EOL;

Таблица результатов

fetch_all и foreachfetch_array и while
3.61971998214723.8901100158691
3.4806330204013.9434731006622
3.38167095184333.7292020320892
9.96719098091139.7998960018158
10.33521199226410.020208120346

Последние два теста с другой таблицей.

В первых трех тестах fetch_all и foreach побеждает с отрывом 10-20%, в последних двух — проигрывает на 3-5%.

Видимо лучше использовать fetch_all и foreach. Но можно и то и другое. fetch_array и while — не держит лишний массив в памяти.

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Роман
Роман
1 год назад

Познавательно, спасибо за работу.