Просто быстрый вопрос.
Есть ли разница в производительности между использованием PDO::fetchAll() и PDO::fetch() в цикле (для больших наборов результатов)?
Я получаю доступ к объектам определяемого пользователем класса, если это имеет значение.
Мое первоначальное необдуманное предположение заключалось в том, что fetchAll может быть быстрее, потому что PDO может выполнять несколько операций в одном операторе, а mysql_query может выполнять только одну. Однако я мало знаю о внутренней работе PDO, и в документации ничего не говорится об этом, а также о том, является ли fetchAll() просто циклом на стороне PHP, сброшенным в массив.
Любая помощь?
memory_get_usage(/* true */)
показывает вам память, выделенную самим PHP. Он не показывает выделенную память LIBRARY. Libmysqlclient и mysqlnd используют свою собственную память. Не память PHP. 16.06.2015memory_get*usage()
покажет память, контролируемую PHP. Прямые вызовы malloc() или mmap() при этом не учитываются. И конечно, небуферизованные запросы в основном не читают из сокета. Это означает, что результаты затем буферизуются на стороне сервера mysql. Но буферизованные запросы хранятся на стороне клиента… в памяти libmysqlclient, которая выделяется через malloc(). (mysqlnd будет использовать emalloc(), который выделяет память с помощью распределителя памяти Zend) … Но этот тест, очевидно, был выполнен с помощью libmysqlclient. (Поскольку цифры слишком нереальны для mysqlnd.) 23.07.2015