删除重复记录,很早就干这个事了,今天再次做了一次,只是这次的重复记录较多,需要考虑不同方法的实现效率,记录一下:
一:采用临时表 暂存原有table的记录,truncate 原有表,然后把distinct的记录insert回去,不太适合very large table。
二:采用max,min,结合rowid方式删除,适合大表中得少量重复记录
Delete Prov_Income_Drp a
Where Rowid < (Select Max(Rowid)
From Prov_Income_Drp b
Where a.Yyyymm = b.Yyyymm And a.Main_Code = b.Main_Code And a.Item = b.Item And
a.Province_Comp_No = b.Province_Comp_No And a.Type = b.Type)

三:适合每个记录只有一条重复得情况,本例中就是这种情况,使用第二中语句很长时间执行也没有执行完,换用此中方法,很快结束,下面二个sql得执行计划
Delete Prov_Income_Drp
Where Rowid In (Select b.Rowid
From Prov_Income_Drp a,Prov_Income_Drp b
Where a.Rowid > b.Rowid And a.Yyyymm = b.Yyyymm And a.Main_Code = b.Main_Code And a.Item = b.Item And
a.Province_Comp_No = b.Province_Comp_No And a.Type = b.Type)
