-- 低效方式:多次单行更新
UPDATE table SET col1=value1 WHERE id=1;
UPDATE table SET col1=value2 WHERE id=2;
-- 高效方式:单次批量更新
UPDATE table SET col1 = CASE
WHEN id=1 THEN value1
WHEN id=2 THEN value2
ELSE col1
END
WHERE id IN (1,2);
-- 设置死锁检测和重试机制
SET innodb_deadlock_detect = ON;
SET innodb_lock_wait_timeout = 50; -- 适当减少锁等待超时
-- 查看最近死锁信息
SHOW ENGINE INNODB STATUS;
-- 监控锁等待
SELECT * FROM performance_schema.events_waits_current;
使用乐观锁:通过版本号或时间戳实现,减少锁争用
UPDATE table SET col1=new_value, version=version+1
WHERE id=123 AND version=old_version;
延迟更新:非关键更新可以放入队列异步处理
分区表:对大表进行分区,减少锁冲突范围
通过以上策略的综合应用,可以显著提升MySQL UPDATE语句的执行效率并有效减少死锁发生概率。