MySQL中的多个更新花费的时间太长

时间:2011-09-13 05:44:44

标签: mysql

每次循环代码时都会发生多次更新。在撰写问题时,我从一张表中发现了80个单独的更新。

这需要10.8秒。如果我不进行更新(只将它们输出到屏幕以便我可以看到程序正在做什么),则需要2.7秒。 8秒钟锁定数据库的时间太长了:(

UPDATE的一个例子是

UPDATE players SET energy=energy+14 WHERE playerID=243 LIMIT 1
UPDATE players SET energy=energy+7 WHERE playerID=258 LIMIT 1
UPDATE players SET energy=energy+3986 WHERE playerID=244 LIMIT 1
UPDATE players SET energy=energy+2990 WHERE playerID=245 LIMIT 1

关于如何提高速度的任何想法?

2 个答案:

答案 0 :(得分:2)

LIMIT 1条款有什么好处?放弃它。

你有playerID的索引吗?如果没有,请添加一个。

Players表有多大?多少行?每一行有多大?

您是否考虑过准备好的UPDATE语句,该语句对操作进行参数化:

UPDATE Players SET Energy = Energy + ? WHERE PlayerID = ?

然后,您可以使用不同的参数多次执行此操作:

  14   243
   7   258
3986   244
2990   245

使用预准备语句的优点是DBMS不必每次都重新解析SQL,因此它的工作量较少。

答案 1 :(得分:1)

一个选项是确保在energy行的播放器上没有任何索引,并确保在playerID上有索引(索引会减少查找时间,但会增加更新/插入次)。

此外,我建议您阅读http://dev.mysql.com/doc/refman/5.0/en/update-speed.html了解一些想法。一个建议是尝试锁定表,更新所有内容,然后解锁。如果你给我一些关于你正在运行的MySQL版本(以及你正在使用的数据库/表格类型(MyIsam / InnoDB等))的更多信息,我可以帮助你。

我希望这有帮助!