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

Jim*_*ein 7 php mysql php-internals

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

最后,mysql中不同驱动程序的游标是否实现不同?有几个MySQL的驱动PHP可用mysql,mysqli,pdo等他们是否都遵循同样的做法?

peu*_*feu 5

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

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

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

根据您的查询,结果集可能在数据库端具体化(如果您需要排序,那么排序必须在您获得第一行之前完成)。

对于不太大的结果集,通常最好一次全部获取,这样服务器可以尽快释放使用过的资源。