日期:2014-05-16  浏览次数:20759 次

大家好,跪求解决一个问题
是这样的,我数据库一张表插入80w条数据,没设置主键,后来发现有40w左右是重复的。我现在想把重复的记录删除。
我用了下面的语句,但是结果特别慢,但是我在网上查说是号称处理千万级记录的数据呢?各位请指点迷津。
delete from intf_data a
where (a.id_tskprefix,a.id_unitcode,a.id_periodtype,a.id_year,a.id_period,a.id_zbcode)
in 
(select id_tskprefix,id_unitcode,id_periodtype,id_year,id_period,id_zbcode from intf_data
 group by id_tskprefix,id_unitcode,id_periodtype,id_year,id_period,id_zbcode
 having count(*) > 1)  and rowid not 
in (
select min(rowid) from intf_data 
group by id_tskprefix,id_unitcode,id_periodtype,id_year,id_period,id_zbcode 
having count(*)>1
)
------解决方案--------------------
引用:
你的数据太多了,可以使用临时表来处理这个问题。
1、你可以先把不重复的数据查询出来放到一个临时表B里边。
2、删除你原来表A(drop table)
3、把临时表B里的数据插入到原来的表A
4、删除临时表B
具体操作:
CREATE TABLE B AS (select distinct * from A); 
drop table A; 
insert into A (select * from B); 
drop table B;

你试一下,我等着接分。哈哈

楼上说对咯