Perl DBD :: mysql'mysql_use_result'插入到另一个表时可以使用吗?

时间:2011-09-01 19:07:11

标签: mysql sql perl dbd

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

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

  

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

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

1 个答案:

答案 0 :(得分:1)

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

但是,我相信你引用的警示是在服务器上阻止事情,而不仅仅是在你的特定客户端。

mysql documentation更清晰一点:

  

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

(我认为这是一种夸大其词,当mysql更像是玩具SQL实现时,可能会被写回来。)