PDO fetchall () соображения производительности?

Прочитав несколько статей о влиянии производительности функции PDO fetchall() PHP, мне любопытно, есть ли другой способ добиться того же результата, не вызывая fetchall() .

Чтобы объяснить, большинство согласны с тем, что fetchall() имеет тенденцию быть ресурсоемкой. В моем случае я не считаю, что это будет слишком большой проблемой. Да, мне нужно вытащить целую таблицу из моей базы данных и отобразить ее пользователю, но она будет составлять около 100 строк; Я не верю, что это будет проблемой. Гипотетически, однако, если мне нужно было вытащить 100 000 строк, что было бы более оптимальным решением?

Гипотетически, если вам нужно вывести все 100 000 строк в одном ответе, вы должны установить PDO::MYSQL_ATTR_USE_BUFFERED_QUERY на false , выполнить запрос и PDO::MYSQL_ATTR_USE_BUFFERED_QUERY набор PDO::MYSQL_ATTR_USE_BUFFERED_QUERY по одной строке за раз с помощью выборки . Чтобы уточнить, php буферизует весь набор результатов независимо от того, вызывается ли fetchAll (), если для PDO::MYSQL_ATTR_USE_BUFFERED_QUERY установлено значение true.

Преимущество заключается в том, что вы резко сокращаете максимальное потребление памяти сценария, и вы получаете возможность запуска потокового вывода раньше, хотя общее время завершения может длиться или не быть больше.

Я игнорирую другие вещи, которые вы должны учитывать в таких экстремальных обстоятельствах, как буферизация вывода и т. Д. …

Альтернативой является выбор одной строки за другой внутри цикла, например:

 while( $row = $statement->fetch() ){ // so something with $row } 

Очевидно, что если вам нужны все строки, например, для вычисления с ними некоторой статистики, то приведенное выше не работает. Однако во многих случаях SQL предоставляет решения, позволяющие рассчитывать такую ​​статистику «на лету» и возвращать только результат.