一个大批量数据更新的问题

lisciple 2015-03-10 01:26:22
mysql一个表user,里面一个id主键,一个name是unique。
数据量为6000W,里面有3000W的数据name是带前缀标记 *** 的。
现在我想把所有前缀***都给去掉,但是去掉之后会重名的数据不处理。
想求一个最优的解决方案,谢谢。

比如
1
我可以create table temp as select name from user
然后再update user u set u.name = substring(u.name, 4) where u.name like 'm*m%'
and not exists (select id from temp t where t.name = substring(u.name, 4))
问题是一条语句更新这么多数据,靠谱不靠谱。

2.
写程序,一次处理update 1W条数据,update之前把将会产生重复的id给剔除,循环6000次
...全文
127 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisciple 2015-03-11
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
感觉上还是用程序吧。这个比较安全,对数据库压力也会容易控制。
那请问比如我6000W数据是按id顺序遍历更新的,我可不可以多线程分段执行,比如我分3个线程出来同步执行,每个线程均遍历200W数据,这样花的时间会变成原来的1/3吗?
ACMAIN_CHM 2015-03-10
  • 打赏
  • 举报
回复
感觉上还是用程序吧。这个比较安全,对数据库压力也会容易控制。
benluobo 2015-03-10
  • 打赏
  • 举报
回复
先建立新表,将原表的数据处理导入即可 create table newTable as select * from user where 1=0 insert ignore into 新表 select id, substring(name, 4) from user

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧