核心是减少扫描和锁争抢。1. 确保WHERE条件使用索引,避免全表扫描;2. 分批更新大范围数据,降低对系统影响;3. 减少冗余索引和无意义赋值,提升写效率;4. 合理控制事务大小与提交频率,优化日志和并发。UPDATE语句性能优化的核心在于减少扫描行数、提升索引效率、控制事务大小以及合理设计SQL结构。
UPDATE语句的执行效率高度依赖WHERE条件是否能命中索引。如果条件字段没有索引,MySQL会进行全表扫描,极大拖慢更新速度。
UPDATE table SET col = val WHERE YEAR(create_time) = 2025,应改为直接比较时间范围
大范围更新容易导致锁表时间长、日志文件暴涨、主从延迟等问题。
UPDATE table SET status = 1,配合循环处理WHERE status = 0 LIMIT 1000
不必要的索引更新会显著降低性能。
SET name = name,即使值未变也会触发索引重建和binlog记录
在InnoDB引擎下,事务控制直接影响性能和并发。