我有一个表,其中有超过200,000行,并且正在增长,需要在给定的时间间隔进行更新。
我过去常常为每个循环执行一次,直到最近才开始工作。现在我收到了PHP超时问题。
更新非常简单。它使用行的唯一ID并更新数量。
我查看了使用CASE,但似乎可以更新的行数有限制。
任何建议都将不胜感激。
答案 0 :(得分:0)
在您的代码中,确定有多少独特的"数量"你必须更新。
假设您有200K产品需要更新,但库存水平往往会保持在0到50之间。
然后你只有大约50个SQL语句。但是,它们可能附带了相当大的连接IN语句。 FOR循环的内容看起来像这样:
$s = "update myTable set quantity = 10 where id in (124,1215,1232,4444,4532,46789);";
$r = $db->query( $s );
另一种方法是拥有数据的本地副本,以及 仅为数量有的产品提交增量 自更新以来实际发生了变化也就是说,对于所有产品而言 已增加1,连接产品ID,并执行:
$s="UPDATE myTable SET quantity = (quantity + 1) WHERE id IN (124,1215,1232,4444,4532,46789)";
$r = $db->query( $s );
制作这些连接的IN语句并不是非常困难。假设我们有$ array_of_ids_that_went_up_by_5:
$in_statement = "( ".implode(",",$array_of_ids_that_went_up_by_5)." );
你可能需要从头到尾rtrim()一个逗号。
应该比200K SQL语句更有效率。