mysql百万级别数据去重,现有方法效率很低求指点

MySql 码拜 8年前 (2017-05-08) 4051次浏览
本人写了个淘宝商品采集,每天能采集200W以上商品数据,无奈商品id(goods_id)重复率太高。
现在想保留商品重复数据id最低的一行,其余删除。
现有去重方法:
delete from 表名 where   id not in (select minid from (select min(id) as  minid from  qiong_goods   group by goods_id) b);
数据量几万的时候还行,超过200W的时候跑了一个多钟。
请高手指点。
解决方案

100

20

试试这样行不,没测试,删除需谨慎
delete from 表名 where
(select COUNT(minid) from
(select min(id) as  minid
from  qiong_goods   group by goods_id) b where minid = id)=0

20

另外,你写的删除是一个事务中的操作,数据量大会导致事务开销很大,这个也会影响性能的,分批删除往往更有效率

20

看你重复的数据量有多大,假如是一大半都是重复的,建议这样操作:
创建一个结构一样的表,然后把源表中不重复的数据,插入到这个新的表,然后把源表重命名,然后把新表改成源表名。
假如重复只是少量,建议写一个存储过程,把全部有重复的要删除的id,放到一个表里,然后开始循环遍历这个表,每次可以删除1000条数据,这么删除肯定能快不少

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql百万级别数据去重,现有方法效率很低求指点
喜欢 (0)
[1034331897@qq.com]
分享 (0)