在mysql中关于通过多字段去除重复记录的方法
来源:互联网 发布:java写倒三角 编辑:程序博客网 时间:2024/05/17 03:16
最近在研究一批网上获取的数据,记录条数约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,b1;
创建一个表存储去重后的记录:tbl_qc;
通过游标方式从原始表中提取记录到去重后的表中,脚本后如下:
drop PROCEDURE if exists procedure_qc;
CREATE PROCEDURE procedure_qc( )
begin
/*参数声明*/
DECLARE num bigint ;
DECLARE id_dqcl INT; /*id_dqcl:当前处理的id*/
/*参数声明*/
DECLARE cur CURSOR FOR SELECT id FROM tb_id;
SELECT COUNT(*) INTO num FROM tb_id;
OPEN cur;
WHILE i<num DO
FETCH cur INTO id_dqcl;
insert into tbl_qc select * from tb_test1 WHERE tb_test1.id = id_dqcl;
SET i=i+1;
END WHILE;
CLOSE cur;
end ;
call procedure_qc();
在两个环境境中执行:
环境1:笔记本 内存8G,CPU i7;耗时:约10小时
环境1:台式机 内存16G,CPU i5;耗时:1159.361s
心得:
标准SQL可以按逻辑写出来,但不一定能有效执行(尽信书不如无书);
性价比:笔记本相对于台式机太垃圾!
- 在mysql中关于通过多字段去除重复记录的方法
- 去除表中的重复 记录(多字段)
- mysql 去除重复记录的方法
- Sql Server表中删除重复记录最简单方法(多字段重复)
- Mysql删除数据库中重复的数据(多字段判断重复)
- 关于SQL语句中去除重复记录方法
- mysql 去除表中重复记录
- Mysql 去除重复记录
- mysql 去除重复记录
- mysql去除重复记录
- mysql防止多字段重复插入
- MYSQL中删除重复记录的方法
- MYSQL中删除重复记录的方法
- MYSQL中删除重复记录的方法
- Mysql中删除重复记录的方法
- MYSQL中删除重复记录的方法
- MYSQL中删除重复记录的方法
- MYSQL中删除重复记录的方法
- 市场营销学第二单元
- MyEclipse Database Explorer配置浅析
- HTML——图形标签
- CTF Field Guide
- Spring的注解驱动控制程序
- 在mysql中关于通过多字段去除重复记录的方法
- AIDL
- androidapp 检测到移动物体,通过web在电脑上实时显示出来
- PAT A1046 Shortest Distance (20)
- web每章重点
- MySQL数据库学习笔记(三)----基本的SQL语句
- Java学习笔记之反射(Reflection)
- 萌新的Canvas笔记(一)
- 【ASP.NET】——Web服务器控件、HTML服务器控件