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

时间:2010-04-20 23:05:36

标签: php mysql

我需要运行一个PHP循环总共100,000次(每个脚本运行大约10,000次),每个循环都有大约5次MySQL更新。当我运行循环50次时,需要3秒。当我运行循环1000次时,大约需要1300秒。正如您所看到的,MySQL正在通过更多UPDATE减慢ALOT。

这是一个示例更新:

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

这是从PHP中随机生成的,但是我可以将它存储在一个变量中并且每n个循环运行一次。

有没有办法让MySQL和PHP以一致的速度运行(PHP存储隐藏的变量?),还是将脚本分开以便它们这样做?

注意:我是为了开发目的而运行它,而不是用于生产,因此只有一台计算机访问数据。

5 个答案:

答案 0 :(得分:1)

使用prepared statements。它们的两个主要好处之一是重复查询更有效。

答案 1 :(得分:1)

使用这样的东西应该加载更快:

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

假设你有一个关于uniqueValue ofcourse的索引。您可以使用默认设置创建最大8MB的查询,但现在1MB应该足够了。这将是一个巨大的查询,但很多更快。

您还可以完全暂时禁用索引更新,这样可以使事情变得更快:

ALTER TABLE table DISABLE KEYS;
ALTER TABLE table ENABLE KEYS;

答案 2 :(得分:0)

关闭auto_commit并在N次后显式提交事务(如果您正在使用InnoDB表)。

答案 3 :(得分:0)

UniqueValue上添加索引并从row1和其他未使用的索引中删除索引。

答案 4 :(得分:0)

除了为row1UniqueValue字段编制索引外,还要确保它们使用的数字数据类型为INTEGER,并从UniqueValue中移除这些单引号。 1}}子句。

WHERE

Else MySQL需要按照它来回按键,然后回到String,这是一个性能成本。