[mysql 去重问题] 如何高效的删除数据表中的重复数据?

2018-02-26 16:59:52 +08:00
 Nick2VIPUser

有一个数据表,共三个字段:id,data,datetime

其中 data 是不能重复的,但是由于粗心在最开始的时候忘记给data字段设置了unique约束。 在插入数据的过程中造成了大量重复。

目前: 数据总量(count(* ))是 50W,不重复数据量 (distinct(data) ) 35W。

现在的需求是把重复的数据删除掉且只保留其中一条。

使用如下语句进行去重(网络上找的):

delete from bj where data_info in
 (select data_info from
 ( select data_info from bj group by data_info having count(data_info)>1) a) 
and id not in 
( select min(id) from 
(select min(id) as id from bj group by data_info having count(data_info)>1 ) b)

先测试了总量为 1000 的数据,功能是 OK 的。

然后在单核 2G 的云主机上对 50W 总量的数据跑这个 sql,跑了超过 1 个小时还没有出结果。

求问有什么高效的方法可以替代这个方法呢?

在此感谢各位老哥。

10755 次点击
所在节点    MySQL
26 条回复
Nick2VIPUser
2018-02-28 14:36:21 +08:00
@lihongjie0209 谢谢您帮我找出来,我试一下!
Nick2VIPUser
2018-02-28 14:37:13 +08:00
@Arthur001 对,我在 stackoverflow 也看到了这个。可以转载的~
Nick2VIPUser
2018-02-28 14:37:51 +08:00
@zhangyp123
@SbloodyS
谢谢各位!
Nick2VIPUser
2018-02-28 14:38:49 +08:00
@annielong 我遇到的需求是只有一个字段重复-_-,mysql 也许可以把四个字段结合起来整理成一个 hash 值然后通过 hash 值判断?
xjroot
2018-10-01 16:40:57 +08:00
已收藏,好帖
chaodada
2020-01-10 18:00:34 +08:00
@lihongjie0209 #15 感谢楼主 参考您的语句解决了我的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/432832

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX