求助!千万级MySQL去冗余数据

敲代码的胖子 2016-10-25 11:15:25
最近在做一个业务,数据清洗方面的。其中有一个步骤是要对表进行去冗余操作。
数据库是:MySQL5.7。
表引擎用的是:MyISAM。
数据量:两千万。

目前的业务是需要对这张表进行去冗余操作。不是针对某个字段,而是指除了id之外(ID在执行这一不前已经删除)其余字段值都相同。
目前采取的的sql是:
1.create table `table1` as select * from `table0` where 1=2;
insert into tsble1 select distinct * from `table0`

2.craeate table ` table1` as select distinct * from `table0`;

但是,这两个方法在效率上太低了,
第一个方法执行了差不多一天时间。
服务器的内存够,这台服务器就是专门来跑数据的。

第二个方法还在测时间,但估计不会节省多少时间。后面还有几张大数据量的表。求大神给个解决的思路。

...全文
311 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
敲代码的胖子 2016-10-25
  • 打赏
  • 举报
回复
引用 4 楼 zhangsheng_1992 的回复:
我能理解成下面的样子么 ID col1 col2 1 a b 2 a b 3 b c 实际上 1跟2是重复的 要剔除1或者2吧 这样的你可以分批处理 1. col1 group by 一下 查询字段 group_concat(id) 完整语句大致如下 select group_concat(id) as ids,col1 from table group by col1; 这步是速度最慢的一步 你可以分次查询再合并 2.然后你得到col1重复的数据id集合 比如下面的格式 ids cols1 1,2 a 3 b 3.然后你遍历每一条 比如遍历第一条 用where in ids 查询出来 然后继续 select group_concat group by cols2 这样递归下去 最后可以得到重复的id 4.建议用多线程脚本来执行 从第二部开始 每一个脚本执行一部分的 希望能帮到你
谢谢,我试下。
zhangsheng_1992 2016-10-25
  • 打赏
  • 举报
回复
我能理解成下面的样子么 ID col1 col2 1 a b 2 a b 3 b c 实际上 1跟2是重复的 要剔除1或者2吧 这样的你可以分批处理 1. col1 group by 一下 查询字段 group_concat(id) 完整语句大致如下 select group_concat(id) as ids,col1 from table group by col1; 这步是速度最慢的一步 你可以分次查询再合并 2.然后你得到col1重复的数据id集合 比如下面的格式 ids cols1 1,2 a 3 b 3.然后你遍历每一条 比如遍历第一条 用where in ids 查询出来 然后继续 select group_concat group by cols2 这样递归下去 最后可以得到重复的id 4.建议用多线程脚本来执行 从第二部开始 每一个脚本执行一部分的 希望能帮到你
敲代码的胖子 2016-10-25
  • 打赏
  • 举报
回复
之前想过用联合索引强制去除重复数据,但是这样的话就需要用所有字段,来做这个联合索引。但是一些字段的类型是text和varchar255,这样建立的联合索引的长度超过了MySQL规定的索引长度。所以也就放弃了这个方法http://blog.csdn.net/rulev5/article/details/7572482
敲代码的胖子 2016-10-25
  • 打赏
  • 举报
回复
引用 1 楼 wangjian0228 的回复:
试试group by, 先找到差异数据间的字段关系,尽量不要把所有字段都放在group by 后面,如果字段够少可以试试加索引
除了id之外(ID在执行这一不前已经删除)其余字段值都相同的数据行,取其中一行,用group by的话也是需要全部字段的。而且测试过,distinct相对快点。
致命的西瓜 2016-10-25
  • 打赏
  • 举报
回复
试试group by, 先找到差异数据间的字段关系,尽量不要把所有字段都放在group by 后面,如果字段够少可以试试加索引

56,940

社区成员

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

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