当我们从其他表插入记录时提交记录

时间:2011-12-16 07:11:55

标签: oracle plsql

我有像以下的SQL查询:

insert into dedupunclear 
  select mdnnumber,poivalue 
  from deduporiginal a 
  where exists (
    select 1 
    from deduporiginal
    where mdnnumber=a.mdnnumber and rowid<a.rowid) 
  or mdnnumber is null;

我的重复数据删除原则中有500K记录。我把这个查询放在函数中,但是需要大约3小时才能将记录提交到dedupunclear表。

有解决性能问题的替代方法吗?

当此查询提交记录时,在某个时间间隔或从select查询获取所有结果后?

1 个答案:

答案 0 :(得分:1)

这就是我前几天做的事情:

    delete from  table a 
     where rowid > 
            (select min(rowid) from table b 
              where   nvl(a.id, 'x') = nvl(b.id, 'x')  )

我只是直接从登台表中删除了行,而不是插入到重复数据删除表中。对于包含100万行的表,此查询工作得很好。我担心nvl函数会杀死索引,但它运行得很好。