PHP 的 MySQL 游标实现及其管理内存的方式
PHP 中的不同 MySQL 游标如何管理内存?我的意思是,当我进行一个检索大型结果集的 MySQL 查询并取回 MySQL 资源时,查询检索到的数据有多少存储在本地内存中,以及如何检索更多结果?当我使用 fetch_array 迭代资源时,光标是否会自动获取所有结果,并将它们提供给我,或者它是一个缓冲系统吗?
最后,mysql中不同驱动程序的游标是否实现不同?有多种适用于 PHP 的 MySQL 驱动程序,mysql
、mysqli
、pdo
等。它们都遵循相同的做法吗?
How do the different MySQL Cursors within PHP manage memory? What I mean is, when I make a MySQL query that retrieves a large result set, and get the MySQL resource back, how much of the data that the query retrieved is stored in local memory, and how are more results retrieved? Does the cursor automatically fetch all the results, and give them to me as I iterate through the resource with fetch_array
or is it a buffered system?
Finally, are the cursors for the different drivers within mysql implemented differently? There's several MySQL drivers for PHP available, mysql
, mysqli
, pdo
, etc. Do they all follow the same practices?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这取决于你要求 php 做什么,例如 mysql_query() 获取所有结果集(如果是 500 兆字节,再见);如果您不想这样做,可以使用:
http://php. net/manual/en/function.mysql-unbuffered-query.php
PDO,MySQL我似乎还有其他方法可以做同样的事情。
根据您的查询,结果集可能会在数据库端具体化(如果您需要排序,则必须在获得第一行之前完全完成排序)。
对于不太大的结果集,通常最好一次获取所有结果,以便服务器可以尽快释放已用的资源。
That depends on what you ask php to do, for instance mysql_query() grabs all the result set (if that's 500 megabytes, goodbye) ; if you don't want that you can use :
http://php.net/manual/en/function.mysql-unbuffered-query.php
PDO, MySQLI seem to have other ways of doing the same thing.
Depending on your query, the result set may be materialized on the database side (if you need a sort, then the sort must be done entirely before you even get the first row).
For not too large result sets it's usually better to fetch it all at once, so the server can free used resources asap.