在mysql中关于通过多字段去除重复记录的方法

本文介绍了如何在MySQL中通过创建临时表和使用游标去除重复记录,详细展示了删除重复记录的SQL语句以及游标实现的过程。在处理大量数据时,游标方法在不同硬件配置下执行时间差异较大,提示了标准SQL的执行效率问题和硬件性能的重要性。
摘要由CSDN通过智能技术生成

最近在研究一批网上获取的数据,记录条数约80多万条,单个表大小约 400M,表中重复记录约1/3,在网上查找了些去除重复记录(重复记录保留最小ID值)的sql语句,整理成如下:

DROP TABLE if exists tmp_table1 ;
DROP TABLE if exists tmp_table2 ;
CREATE TEMPORARY TABLE tmp_table1 SELECT id,a1,b1 FROM tb_test2;
CREATE TEMPORARY TABLE tmp_table2 SELECT id,a1,b1 FROM tb_test2;
delete from tb_test2 where (tb_test2.a1,tb_test2.b1) in (select tmp_table1.a1,tmp_table1.b1 from tmp_table1 group by tmp_table1.a1,tmp_table1.b1 having count(*) > 1) 
and tb_test2.id not in (select min(tmp_table2.id) from tmp_table2 group by tmp_table2.a1,tmp_table2.b1 having count(*) > 1);

以上语句记录在数1万左右可以正常执行,但是上20万条左右记录时运行直接无反应(请高手指教一下以上语句是否可以做一下优化!)。

后通过寻求其他途径,思路如下:

创建一个表存储去重后记录的ID值:tb_id;

/*提取无重复的记录及重复记录以最小ID值提取,以a1,b1两个字段作为判断重复记录条件*/
create table tb_id select min(id) AS id from tb_test2 group by a1,b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值