1

我正在 mysql 中进行大型连接,然后对结果数据进行操作并将其写入另一个表。现在,我使用的是默认的 mysql_store_result,但是查询后的 $sth->execute() 需要大约 20 分钟才能运行。我想切换到 mysql_use_result 因为我一次只处理一行。

但是,这部分文档让我很困扰:

此属性强制驱动程序使用 mysql_use_result 而不是 mysql_store_result。前者速度更快,内存消耗更少,但往往会阻塞其他进程。(这就是为什么 mysql_store_result 是默认值的原因。)

我一次只处理一行,然后将结果存储在一个数组中。每 500 个条目,我将插入一个单独的表。在 mysql_use_result 循环中可以这样做吗?如果我为 INSERT 定义一个新的 DB 处理程序,可以这样做吗?

4

1 回答 1

1

您应该使用单独的数据库连接来进行插入。

但是,我相信您引用的警告说明是在谈论阻止服务器上的内容,而不仅仅是在您的特定客户端上。

mysql文档更清晰一些:

如果您在客户端对每一行进行大量处理,或者如果将输出发送到用户可以键入 ^S(停止滚动)的屏幕,则不应使用 mysql_use_result()。这会占用服务器并阻止其他线程更新从中获取数据的任何表。

(我认为这是夸大其词,并且可能在 mysql 更像是一个玩具 SQL 实现时被写回了。)

于 2011-09-01T19:53:26.483 回答