mysql 10万条数据 更新一个字段 需要很长时间

麻烦大家了,请教一个mysql 问题,我这里有一个表 ,单表已经有100多万条数据,我要对其中的10万条做更新操作,非常慢 93分钟了,小菜鸟一枚,请问大家怎么可以提高更新速度

图片描述

阅读 28.3k
6 个回答

先给 publish_date 分组 将同一个日期的 Id 汇总到一起
这样你的sql数量将会大大减少

优化之后会是类似这样

update yamaxunnew set publish_date = '2016年1月1日' where id in (1182323,1182324,...)

这种逐条更新的本来就特别慢,可以先创建个索引看看有没有效果,或者将你的SQL语句尽量合并成一句

replace into table(id,publish_date) values (221,'2026'),(2,'2026'),...(x,'2026');

  • 当前系统本身负载就不低,解决办法:把其它连接全断掉,把系统资源让给你更新。
  • publish_date 上有索引吧,解决办法:删除索引,更新完之后重建索引。
  • id 上没有索引(不太可能吧),解决办法:在 id 上创建索引。
  • 当前连接打开了 AUTO_COMMIT 之类的开关?解决办法:不要用 AUTO_COMMIT , 自己分组,比如 100 条为一组,用 begin; commit; 来控制事务。

用mysql自带的批量更新会快很多。测试20万条数据,也就是两分半钟。

UPDATE tableName
    SET orderId = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
    END
WHERE id IN (1,2,3)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题