PHP 的 MySQL 游标实现及其管理内存的方式

发布于 2024-11-05 07:06:41 字数 291 浏览 4 评论 0原文

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

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-11-12 07:06:41

这取决于你要求 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文