假设我有一个包含 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) - ??
我可能有相当数量的行(几十万行)。一次分“ block ”执行此操作是否更好? (并不是说我很快就会用完 RAM/交换空间)
最佳答案
如果集合中的所有 E 都会获得相同的值,那就很简单:
更新表 SET 'E' = "value"WHERE 'C' > 10;
如果不是,并且 E 由于外部逻辑而获得不同的值,则您需要继续迭代集合并逐行更新。
这可以优化。尝试在结果集上打开可更新游标并直接从那里发出更新或基于准备好的语句生成批处理。
关于mysql - 优化 MySQL 大量行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966171/