MySql-更新一个包含1000行的表需要30秒
我有一张1000行的桌子。我使用光标选择循环中的每一行,并更新每一行上的值。该表只有一个主键,没有索引。select和update语句仅使用主键ID。在没有数据库加载的情况下,更新所有1000行的操作只需31秒。当我在DB上运行一些东西时,这会上升到80秒以上 有人能给我解释一下为什么在数据库上完全没有负载的情况下,1000行需要30秒以上的时间来执行吗 谢谢 代码如下:MySql-更新一个包含1000行的表需要30秒,mysql,Mysql,我有一张1000行的桌子。我使用光标选择循环中的每一行,并更新每一行上的值。该表只有一个主键,没有索引。select和update语句仅使用主键ID。在没有数据库加载的情况下,更新所有1000行的操作只需31秒。当我在DB上运行一些东西时,这会上升到80秒以上 有人能给我解释一下为什么在数据库上完全没有负载的情况下,1000行需要30秒以上的时间来执行吗 谢谢 代码如下: DECLARE curPlayers CURSOR FOR SELECT Id, T
DECLARE curPlayers CURSOR FOR
SELECT
Id,
Turns,
Money,
Morale,
MissilePower,
TurnsPerUpdate,
MoneyPerUpdate,
MoralePerUpdate,
MissilePowerPerUpdate,
AvailableLandToPurchase,
TS
FROM player;
OPEN curPlayers;
FETCH curPlayers INTO
vPlayerId,
vPlayerTurns,
vPlayerMoney,
vPlayerMorale,
vPlayerMissilePower,
vPlayerTurnsPerUpdate,
vPlayerMoneyPerUpdate,
vPlayerMoralePerUpdate,
vPlayerMissilePowerPerUpdate,
vPlayerAvailableLandToPurchase,
vPlayerTS;
-- ...Some simple sets on the vNewTurns variables used below...
UPDATE player SET
Turns = vNewTurns,
Money = vNewMoney,
Morale = vNewMorale,
MissilePower = vNewMissilePower,
AvailableLandToPurchase = vNewAvailableLandToPurchase
WHERE
Id = vPlayerId;
为什么要这样做,而不是使用单一的
更新
查询?如果你展示你的代码,我们几乎可以肯定地向你展示一种更有效的方式。游标速度很慢。在一个语句中执行,并将thr表连接在一起,以真正快速地执行,因为每行我必须计算一些值,我将使用这些值更新该行。我已注释掉“UPDATE”语句并保留了计算,该操作需要0.03秒。在另一台服务器上,使用相同的数据运行该操作需要0.5秒。它运行在新安装的Windows Server 2008 R2 12GB四核计算机上。