2017-07-25 111 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

相關問題