104oracle大表删除重复记录的几种方法(转)
表上某个字段(或某几个字段)有重复值,有需求要把重复记录删除,只保留一条.
如果是小表,随便怎么折腾都行; 如果是大表(至少1千万条记录以上,或者占用10G以上空间), 我们可能需要想办法加快这个速度 , 这时可以参考下面方法:
要求:
删除t1表 object_name字段上的重复记录,只保留其对应created字段最大的那一条.
先查表的总记录数和需要删除的重复记录数,dup_cnt就是需要删除的重复记录数:
--如果是多个字段去重,一起写到 group by 后面
select /*+ parallel(8) */
sum(cnt) as total_cnt
,sum(cnt-1) as dup_cnt
from (select count(*) cnt from t1 group by object_name )
;