MySQL
MySQL
-- 按主键区间小批推进
UPDATE orders SET status = 'archived'
WHERE status = 'done' AND id BETWEEN 1 AND 10000;
-- 循环推进 id 区间直到处理完成
-- 单表可用 ORDER BY + LIMIT
UPDATE orders SET status = 'archived'
WHERE status = 'done'
ORDER BY id
LIMIT 1000;PostgreSQL
PostgreSQL
-- 借 ctid 分批(每批重新定位)
UPDATE orders SET status = 'archived'
WHERE ctid IN (
SELECT ctid FROM orders WHERE status = 'done' LIMIT 1000
);| 要点 | 每批独立提交;批间可加入短暂停降低持续压力 |
|---|---|
| 索引 | WHERE 里带能走索引的条件(主键或状态索引) |
| 断点 | 脚本记录进度,中断后从上次位置继续 |