PHP的MySQL Cursor实现以及它们如何管理内存

时间:2011-05-05 14:48:13

标签: php mysql php-internals

PHP中不同的MySQL游标如何管理内存?我的意思是,当我创建一个MySQL查询来检索一个大的结果集,然后获取MySQL资源时,查询检索的数据有多少存储在本地内存中,以及如何检索更多结果?光标是否自动获取所有结果,并在我使用fetch_array迭代资源时将它们提供给我,还是作为缓冲系统?

最后,mysql中不同驱动程序的游标是否实现不同?有几个可用于PHP的MySQL驱动程序,mysqlmysqlipdo等。它们都遵循相同的做法吗?

1 个答案:

答案 0 :(得分:4)

这取决于你要求php做什么,例如mysql_query()抓取所有结果集(如果那是500兆字节,再见);如果你不想要,你可以使用:

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

PDO,MySQLI似乎还有其他方法可以做同样的事情。

根据您的查询,结果集可能在数据库端实现(如果您需要排序,则必须在您获得第一行之前完全排序)。

对于不太大的结果集,通常最好一次获取所有结果,因此服务器可以尽快释放使用的资源。