优化许多行的MySQL更新

时间:2015-04-30 11:10:31

标签: mysql

假设我有一个包含A,B,C,D,E和F列的表.A,B和C是此表中的主键。

我抓住了一组行:

SELECT A, B, C, D FROM table WHERE C > 10;

现在我想为结果集中的每一行更新每个E(我使用D的值来执行此操作)。这样做的最佳方式是什么?

  • 只为每个条目运行UPDATE table SET E=value WHERE .....个查询?
  • 执行一次REPLACE INTO table VALUES ...查询(但如果存在行则执行删除操作,我还需要在早期的SELECT中读取F)
  • ...

我可能有相当数量的行(数十万)。在“块”中一次执行此操作可能更好吗? (不是我很快就会用完RAM /交换空间)

1 个答案:

答案 0 :(得分:0)

如果集合中的所有E都将获得相同的值,则很容易:

UPDATE table SET 'E' = "value" WHERE 'C' > 10;

如果没有,并且由于外部逻辑,E得到不同的值,你需要继续迭代集合并逐行更新。

这可以优化。尝试在结果集上打开可更新的游标并直接从那里发出更新,或者根据准备好的语句生成批处理。