2011-09-01 54 views
1

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

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

这个属性强制驱动程序使用了mysql_use_result,而不是了mysql_store_result。前者速度更快,内存消耗更少,但往往阻碍其他进程。 (这就是为什么mysql_store_result是默认设置。)

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

回答

1

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

不过,我相信你引用的警告是关于在服务器上阻止事情,而不是在你的特定客户端上。

mysql documentation是略知一二:

如果你是做了很多处理的客户端上的每一行,你不应该使用了mysql_use_result(),或者如果输出发送到屏幕用户可以在其上键入^ S(停止滚动)。这将绑定服务器并阻止其他线程更新从中获取数据的任何表。

(我认为是言过其实,并可能已被写回当MySQL是更多的玩具SQL实现的。)

+0

最后一行只是让我更加怀疑。我没有写信到同一张桌子,因为我正在阅读。 –

+0

你不是,但是有人吗?无论如何,这个mysql页面上的东西很清楚,你需要一个单独的连接来做其他的事情。 – ysth

+0

我会继续尝试。我会标记你为答案。 –

相关问题