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

MySql 码拜 8年前 (2014-04-27) 1080次浏览 0个评论

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次

20分
先建立新表,将原表的数据处理导入即可

create table newTable as select * from user where 1=0

insert ignore into 新表 select id,  substring(name, 4) from user

20分
感觉上还是用程序吧。这个比较安全,对数据库压力也会容易控制。
引用 2 楼 ACMAIN_CHM 的回复:

感觉上还是用程序吧。这个比较安全,对数据库压力也会容易控制。

那请问比如我6000W数据是按id顺序遍历更新的,我可不可以多线程分段执行,比如我分3个线程出来同步执行,每个线程均遍历200W数据,这样花的时间会变成原来的1/3吗?


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一个大批量数据更新的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!