如何有效地删除表中的重复记录

svk*_*svk 2 oracle oracle-10g

我知道有几个选项可以删除重复的行,例如:

  • 行号
  • 分析 fn 就像 Rank(), row_number()

最有效的方法是什么?

a_h*_*ame 5

如果您有能力拥有一个临时表,那么使用旧表的不同值创建新表比删除行要快得多。就像是:

create table no_dupes
as 
select min(id) as id,
       col_a,
       col_b,
       col_c,
       min(col_d) as col_d,
       min(col_e) as col_e
from table_with_dupes
group by col_a, col_b, col_c;
Run Code Online (Sandbox Code Playgroud)

当然,这具有需要重新创建所有索引和约束的缺点。但根据我的经验,它会更快 - 特别是如果您要删除大表中的大量行。