我在mysql中进行了一个大型连接,然后对结果数据执行操作并将其写入另一个表。现在,我正在使用默认的mysql_store_结果,但是查询后的$sth->execute()大约需要20分钟才能运行。我想切换到mysql_use_result,因为我一次只对一行执行操作。
但是,这部分文档让我很困扰:
此属性强制驱动程序使用mysql_use_result,而不是mysql_store_result。前者速度更快,占用的内存更少,但往往会阻塞其他进程。(这就是为什么mysql_store_result是默认值。)
我一次操作一行,然后将结果存储到数组中。每500个条目,我就在一个单独的表中插入一个。在mysql使用结果循环中这样做可以吗?如果我为插入定义一个新的DB处理程序可以吗?
最佳答案
应该使用单独的数据库连接来执行插入操作。
然而,我相信你引用的警告是关于在服务器上阻塞东西,而不仅仅是在你的特定客户机上。
mysql documentation更清晰一些:
如果要对客户端的每一行进行大量处理,或者如果输出被发送到用户可以键入a^S(停止滚动)的屏幕,则不应使用mysql\u use\u result()。这将绑定服务器并防止其他线程更新从中获取数据的任何表。
(我认为这是一个夸张的说法,可能是在mysql更像是一个玩具SQL实现时写回来的。)
关于mysql - Perl DBD::mysql'mysql_use_result'可以在插入另一个表时使用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7275211/