"小王最近接手了一个电商项目,促销活动期间需要批量更新10万件商品的价格,他最初使用简单的for循环逐条更新,结果系统直接卡死,DBA同事差点找他'谈心'..." 😅 相信不少开发者都遇到过类似情况,今天我们就来彻底解决MySQL批量更新的痛点!
UPDATE products SET price = CASE WHEN id = 1 THEN 19.9 WHEN id = 2 THEN 29.9 WHEN id = 3 THEN 39.9 END WHERE id IN (1,2,3);
💡 适合100条以内的更新,语法直观但数据量大时SQL会变得冗长
INSERT INTO products (id, price) VALUES (1, 19.9), (2, 29.9), (3, 39.9) ON DUPLICATE KEY UPDATE price = VALUES(price);
✨ 优势:原子性操作,避免先查询再更新的开销
-- 创建临时表 CREATE TEMPORARY TABLE temp_update ( id INT PRIMARY KEY, price DECIMAL(10,2) ); -- 批量插入要更新的数据 INSERT INTO temp_update VALUES (1, 19.9), (2, 29.9), (...); -- 执行关联更新 UPDATE products p JOIN temp_update t ON p.id = t.id SET p.price = t.price;
🚀 大数据量下性能最佳,减少网络传输开销
START TRANSACTION; -- 批量更新操作 UPDATE ...; COMMIT;
⚠️ 注意:事务不是越大越好,建议每5000-10000条提交一次
SET SESSION max_allowed_packet=128*1024*1024; SET @@autocommit=0;
💪 调整这些参数可以让批量更新效率提升3-5倍
SHOW PROCESSLIST
,避免阻塞其他查询方法 | 耗时 | CPU占用 | 锁持有时间 |
---|---|---|---|
逐条更新 | 98s | 85% | 长 |
CASE WHEN批量 | 12s | 45% | 中 |
临时表法 | 2s | 30% | 短 |
事务分批临时表法 | 8s | 25% | 极短 |
下次当你面对大批量数据更新时,不妨试试这些方法,让你的MySQL性能飞起来!根据2025年最新基准测试,合理使用批量更新技术可以将系统吞吐量提升5-10倍哦~ 🎉
本文由 吕雨竹 于2025-07-29发表在【云服务器提供商】,文中图片由(吕雨竹)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/476896.html
发表评论