Perl DBD::mysql 'mysql_use_result'可以在插入另一个表时使用吗?
我正在 mysql 中进行大型连接,然后对结果数据进行操作并将其写入另一个表。现在,我使用默认的 mysql_store_result,但是查询后的 $sth->execute() 需要大约 20 分钟才能运行。我想切换到 mysql_use_result 因为我一次只处理一行。
但是,文档的这一部分让我感到困扰:
此属性强制驱动程序使用 mysql_use_result 而不是 mysql_store_result。前者速度更快,内存消耗更少,但往往会阻塞其他进程。 (这就是为什么 mysql_store_result 是默认值。)
我一次只处理一行,然后将结果存储在一个数组中。每 500 个条目,我都会插入到一个单独的表中。在 mysql_use_result 循环中可以这样做吗?如果我为 INSERT 定义一个新的数据库处理程序可以吗?
I'm doing a large join in mysql, and then acting on the resulting data and writing it to another table. Right now, I'm using the default mysql_store_result, but the $sth->execute() after the query takes about 20 minutes to run. I'm wanting to switch over to mysql_use_result since I'm only acting on one row at a time.
But, this part of the documentation bothers me:
This attribute forces the driver to use mysql_use_result rather than mysql_store_result. The former is faster and less memory consuming, but tends to block other processes. (That's why mysql_store_result is the default.)
I'm acting on one row at a time, and then storing the result in an array. Every 500 entries, I do an INSERT into a separate table. Would this be OK to do from within the mysql_use_result loop? Would it be OK to do if I define a new DB handler for the INSERTs?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该使用单独的数据库连接来执行插入。
但是,我相信您引用的警告注释是在谈论阻止服务器上的事物,而不仅仅是在您的特定客户端上。
mysql 文档 更清晰一些:
(我认为这是夸大其词,并且可能是在 mysql 更像是一个玩具 SQL 实现时写回来的。)
You should use a separate DB connection to do the inserts.
However, I believe the cautionary note you quote is talking about blocking things on the server, not just on your particular client.
The mysql documentation is a little clearer:
(I believe that's an overstatement, and may have been written back when mysql was much more of a toy SQL implementation.)