繁体   English   中英

MySQL成千上万的更新,速度变慢

[英]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和其他未使用的索引中删除索引。

除了索引row1UniqueValue字段外,还请确保它们正在使用数字数据类型(如INTEGER并从WHERE子句中的UniqueValue中删除那些单引号。

mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`=5");

否则,MySQL将需要对它进行往返处理,这会降低性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM