【问题标题】:Perl DBD::mysql 'mysql_use_result' OK to use while inserting to another table?Perl DBD::mysql 'mysql_use_result' 在插入另一个表时可以使用吗?
【发布时间】:2011-11-08 15:59:44
【问题描述】:

我在 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 处理程序,可以这样做吗?

【问题讨论】:

    标签: mysql sql perl dbd


    【解决方案1】:

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

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

    mysql documentation 更清晰一点:

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

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

    【讨论】:

    • 最后一行让我更加好奇。我没有写到我正在阅读的同一张桌子上。
    • 你不是,但有人吗?无论如何,那个 mysql 页面上有一些东西很清楚你需要一个单独的连接来做其他事情。
    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多