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

Posted

技术标签:

【中文标题】PHP MySQL Cursor 实现以及它们如何管理内存【英文标题】:PHP's MySQL Cursor implementations and how they manage memory 【发布时间】:2011-08-19 11:23:36 【问题描述】:

php 中不同的 mysql 游标如何管理内存?我的意思是,当我进行一个检索大型结果集的 MySQL 查询并取回 MySQL 资源时,查询检索到的数据有多少存储在本地内存中,以及如何检索到更多结果?游标会自动获取所有结果,并在我使用 fetch_array 遍历资源时将它们提供给我,还是缓冲系统?

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

【问题讨论】:

【参考方案1】:

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

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

PDO、MySQL 我似乎有其他方法可以做同样的事情。

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

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

【讨论】:

以上是关于PHP MySQL Cursor 实现以及它们如何管理内存的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Flask从MySQL获取数据集?

使用 Python 和 mySQL(以及作为操作系统的 windows), cursor.execute() 不返回任何结果,但它正在连接

用python代码简单连接MySQL以及插入数据的两种方法

PHP的10个不应该

MySQL 版本 5.5.37:使用 CURSOR 删除超过 30 天的表

django如何实现存在性检查