2017-07-25 78 views
0

我已经得到了脚本,但完成的执行时间约为5分钟以删除11320860条记录。是否有替代方式来编写此查询,以便减少执行时间?从一个条件删除Oracle数据库中的重复行

情景是相同的记录组合可以有E以及A记录。如果同一个组合至少存在一条E记录,代码试图删除A和E记录。

Delete from tableA u 
WHERE EXISTS 
    (Select 1 from tableA w 
    WHERE w.a = u.a 
    AND w.b = u.b 
    AND w.c = u.c 
    AND w.d = u.d 
    AND w.flag ='E'); - Del about 11320860 records in 4 Mins 
+0

为什么不干脆,'从表A,其中标志= 'E' 删除; '你的查询会产生不必要的开销 –

+0

你可以使用合并 – GurV

+0

情景是相同的记录组合可以有E以及A记录。如果同一个组合至少存在一条E记录,代码试图删除A和E记录。 – Harshil

回答

1

所以,你需要这个,我觉得:

Delete from tableA u 
WHERE u.flag in ('A', 'E') 
    and EXISTS 
    (Select 1 from tableA w 
     WHERE w.a = u.a 
     AND w.b = u.b 
     AND w.c = u.c 
     AND w.d = u.d 
     AND w.flag ='E') 

这种方式也应该工作:

delete from tableA 
    where flag in ('A', 'E') 
    and (a, b, c, d) in 
    (select a, b, c, d 
     from tableA 
     where flag = 'E') 
+0

我添加了一个场景,其中相同的记录组合可以有E和A记录。如果同一个组合至少存在一条E记录,代码试图删除A和E记录。 – Harshil

+0

@Harshil我更新了查询 – Dmitry

相关问题