Реализации PHP MySQL Cursor и как они управляют памятью - PullRequest
7 голосов
/ 05 мая 2011

Как разные курсоры MySQL в PHP управляют памятью? Я имею в виду, что когда я делаю запрос MySQL, который извлекает большой набор результатов и возвращает ресурс MySQL, сколько данных, полученных в результате запроса, хранится в локальной памяти и как можно получить больше результатов? Курсор автоматически извлекает все результаты и выдает их мне, когда я перебираю ресурс с fetch_array или это буферизованная система?

Наконец, по-разному ли реализованы курсоры для разных драйверов в mysql? Доступно несколько драйверов MySQL для PHP: mysql, mysqli, pdo и т. Д. Все ли они используют одинаковую практику?

1 Ответ

4 голосов
/ 05 мая 2011

Это зависит от того, что вы просите php сделать, например, mysql_query () захватывает весь набор результатов (если это 500 мегабайт, до свидания);если вы не хотите, чтобы вы могли использовать:

http://php.net/manual/en/function.mysql-unbuffered-query.php

PDO, у MySQLI, похоже, есть другие способы сделать то же самое.

В зависимости от вашего запросанабор результатов может быть материализован на стороне базы данных (если вам нужна сортировка, то сортировка должна быть выполнена полностью, прежде чем вы даже получите первую строку).

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

...