[英]MySQL thousands of updates, slowing down
我需要运行一个PHP循环,总共进行100、000次(每个脚本运行大约10,000次),并且每个循环都具有约5个MySQL UPDATES。 当我运行循环50次时,需要3秒。 当我运行1000次循环时,大约需要1300秒。 如您所见,MySQL正在使用更多UPDATE来放慢速度。
这是一个示例更新:
mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`='5'");
这是从PHP随机生成的,但是我可以将其存储在变量中,并每n个循环运行一次。
有什么方法可以使MySQL和PHP以一致的速度运行(PHP是否存储隐藏变量?),或者拆分脚本来这样做?
注意:我出于开发目的而不是生产目的运行它,因此将只有1台计算机访问数据。
使用准备好的陈述 。 它们的两个主要优点之一是重复查询更加有效。
使用这样的东西应该可以更快地加载:
mysql_query("UPDATE table SET `row1`=`row1` + 1 WHERE `UniqueValue` IN (5, ... 10)");
假设您对课程的uniqueValue有一个索引。 您可以使用默认设置最多创建8MB的查询,但现在1MB应该已经足够了。 这将是一个巨大的查询,但速度要快得多。
您也可以暂时完全禁用索引更新,这也应该使速度更快:
ALTER TABLE table DISABLE KEYS;
ALTER TABLE table ENABLE KEYS;
关闭auto_commit并在N次之后显式提交事务(如果您使用的是InnoDB表)。
在UniqueValue
上添加索引,并从row1
和其他未使用的索引中删除索引。
除了索引row1
和UniqueValue
字段外,还请确保它们正在使用数字数据类型(如INTEGER
并从WHERE
子句中的UniqueValue
中删除那些单引号。
mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`=5");
否则,MySQL将需要对它进行往返处理,这会降低性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.