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 )
    ;