Php MySQL数千次更新,速度变慢
我需要运行一个PHP循环总共100000次(每个脚本运行大约10000次),每个循环大约有5个MySQL更新。当我运行循环50次时,需要3秒。当我运行循环1000次时,大约需要1300秒。正如您所看到的,MySQL的速度随着更新的增加而减慢了很多 这是一个示例更新:Php MySQL数千次更新,速度变慢,php,mysql,Php,Mysql,我需要运行一个PHP循环总共100000次(每个脚本运行大约10000次),每个循环大约有5个MySQL更新。当我运行循环50次时,需要3秒。当我运行循环1000次时,大约需要1300秒。正如您所看到的,MySQL的速度随着更新的增加而减慢了很多 这是一个示例更新: mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`='5'"); 这是从PHP随机生成的,但我可以将其存储在一个变量中,并每n个循环运行一次 有什么
mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`='5'");
这是从PHP随机生成的,但我可以将其存储在一个变量中,并每n个循环运行一次
有什么方法可以使MySQL和PHP以一致的速度运行(PHP是否存储隐藏变量?),或者将脚本拆分,让它们这样做
注意:我运行此操作是为了开发目的,而不是为了生产,因此只有一台计算机访问数据。关闭自动提交,并在N次后显式提交事务(如果使用InnoDB表)。它们的两个主要优点之一是重复查询效率更高。除了索引
row1
和UniqueValue
字段外,还要确保它们使用类似INTEGER
的数字数据类型,并从WHERE
子句中的UniqueValue
中删除这些单引号
mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`=5");
否则MySQL将需要在字符串之间来回传递它,这是一种性能成本。使用类似于这样的方法应该可以更快地加载:
mysql_query("UPDATE table SET `row1`=`row1` + 1 WHERE `UniqueValue` IN (5, ... 10)");
假设你们有一个关于唯一值的索引。您可以使用默认设置创建高达8MB的查询,但1MB应该已经足够了。这将是一个巨大的查询,但要快得多
您还可以暂时完全禁用索引更新,这也会让事情变得更快:
ALTER TABLE table DISABLE KEYS;
ALTER TABLE table ENABLE KEYS;
您正在运行的数据库类型是什么?MyISAM还是InnoDB?如果您使用的是InnoDB,那么您使用的是事务吗?其他查询是什么?我很好奇是否可以将它们结合起来。在一个循环中查询数千次通常是个坏主意。合并您的查询。性能将显著提高。几乎有数千个相同的查询,只是不同的行和不同的uniquevalue。您可以在
update
语句中指定要更新的多个列,并使用其他运算符(例如IN
或BETWEEN…和
)指定多个uniquevalue。出于同样的原因,我仍然对具体的问题感到好奇。如果一个循环中只有5个简单查询,那么代码就不多了。展示给我们看。谢谢,我认为这对我们帮助最大!