假设我有一个包含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 /交换空间)
答案 0 :(得分:0)
如果集合中的所有E都将获得相同的值,则很容易:
UPDATE table SET 'E' = "value" WHERE 'C' > 10;
如果没有,并且由于外部逻辑,E得到不同的值,你需要继续迭代集合并逐行更新。
这可以优化。尝试在结果集上打开可更新的游标并直接从那里发出更新,或者根据准备好的语句生成批处理。