我在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处理程序,可以吗?
您应该使用一个单独的DB连接来执行插入。
然而,我相信你引用的警告是关于在服务器上阻止事情,而不仅仅是在你的特定客户端。
mysql文档更清晰一些:
你不应该使用mysql_use_result(),如果你在客户端对每一行做大量的处理,或者如果输出被发送到一个屏幕上,用户可能会输入^S(停止滚动)。这将束缚服务器,并阻止其他线程更新从中获取数据的任何表。
(我认为这是夸大其词,可能是在mysql还是一个玩具SQL实现的时候写的)