现有一个表 table
有两个字段 a,b
没有自增主键
现在想把 a,b 重复的数据删除,但是保留一条。
数据在千万级别,求一个高效的方法去重。
数据库
------解决方案--------------------
-------------如果删除的数据量比较大时
With dup as
(
Select *,ROW_NUMBER() Over(Partition by a,b order by a,b)as rn
From dbo.tb
)
Select a,b
Into dbo.duptmp
From dup
Where rn = 1;
---
drop table tb;
exec sp_rename 'dbo.duptmp','dbo.tb'
当删除的数据比较少时。
------解决方案--------------------
第一步先把非重复的插入一个临时表(这个临时表就是你希望保留的数据),然后第二步把原表清空了,第三步把数据插回去原表