我需要运行一个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存储隐藏的变量?),还是将脚本分开以便它们这样做?
注意:我是为了开发目的而运行它,而不是用于生产,因此只有一台计算机访问数据。
答案 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)
除了为row1
和UniqueValue
字段编制索引外,还要确保它们使用的数字数据类型为INTEGER
,并从UniqueValue
中移除这些单引号。 1}}子句。
WHERE
Else MySQL需要按照它来回按键,然后回到String,这是一个性能成本。