У меня странное время, когда я выбираю из таблицы с примерно 30 000 строк.
Кажется, мой сценарий использует огромный объем памяти для простого обхода запроса только вперед.результат.
Обратите внимание, что этот пример является несколько надуманным, абсолютно абсолютным минимальным примером, который очень мало похож на реальный код и не может быть заменен простой агрегацией базы данных.Он предназначен для иллюстрации того, что не нужно сохранять каждую строку на каждой итерации.
<?php
$pdo = new PDO('mysql:host=127.0.0.1', 'foo', 'bar', array(
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
));
$stmt = $pdo->prepare('SELECT * FROM round');
$stmt->execute();
function do_stuff($row) {}
$c = 0;
while ($row = $stmt->fetch()) {
// do something with the object that doesn't involve keeping
// it around and can't be done in SQL
do_stuff($row);
$row = null;
++$c;
}
var_dump($c);
var_dump(memory_get_usage());
var_dump(memory_get_peak_usage());
Это приводит к выводу:
int(39508)
int(43005064)
int(43018120)
Я не понимаю, почему 40 мегабайтПамять используется, когда в любой момент времени не требуется хранить какие-либо данные.Я уже понял, что могу уменьшить объем памяти примерно в 6 раз, заменив «SELECT *» на «SELECT home, away», однако я считаю, что даже это использование будет безумно высоким, и таблица будет только увеличиваться.
Есть ли настройка, которую я пропускаю, или в PDO есть какое-то ограничение, о котором я должен знать?Я рад избавиться от PDO в пользу mysqli, если он не может это поддерживать, так что, если это мой единственный вариант, как мне выполнить это вместо mysqli?