SQL批量更新需分批执行、缩小事务粒度、避免全表扫描、合理使用索引;按主键或索引字段切片,每次更新2000–5000行,确保WHERE条件走索引,防止锁升级与性能恶化。

SQL批量更新不加控制容易引发锁表、慢查询甚至服务阻塞。核心思路是:分批执行、缩小事务粒度、避免全表扫描、合理使用索引。
分批次更新,降低单次事务压力
一次性更新百万级数据会持有行锁/页锁过久,导致其他查询或更新被阻塞。应按主键或有索引的字段切片,每次只更新几千条。
- MySQL示例(按id分页):
UPDATE user SET status = 1 WHERE id BETWEEN 10001 AND 15000 AND status = 0; - 用循环或脚本控制批次,例如每次取5000条,检查影响行数是否为0来终止
- 批次大小建议2000–5000,具体根据单行数据大小和服务器负载调整
确保WHERE条件走索引,避免全表扫描锁
如果UPDATE的WHERE子句无法命中索引,数据库可能升级为表级锁(尤其MyISAM)或大量行锁(InnoDB),大幅延长锁持有时间。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~