簡體   English   中英

我如何提高此oracle sql刪除查詢的性能?

[英]how can i improve the performance of this oracle sql delete query?

我必須根據另一個表中的選擇查詢結果從表中刪除一些不需要的行

DELETE /*+ parallels(fe) */  FROM fact_x fe
WHERE fe.key NOT IN(
  SELECT DISTINCT di.key
  FROM dim_x di
  JOIN fact_y fa
  ON fa.code         = di.code
  WHERE fa.code_type = 'ABC'
 );

內部選擇查詢返回77行,並在幾毫秒內執行。 但外部刪除查詢將永久運行(超過8小時)。 我試圖通過將delete轉換為select count(1)及其總數6680萬行中的約6640萬fact_x行來計算要刪除多少行。 我不是想截斷。 我需要保留剩余的行。

還有其他方法可以做到這一點嗎? 將通過運行pl / sql游標刪除它會更好?

僅將要保留的行插入另一個表,然后刪除現有表,是否更有意義? 即使有FK禁用/重新創建/等。 幾乎可以肯定會更快。

您可以添加“ toBeDeleted”列嗎? 設置不需要“ NOT IN”構造的查詢。 刪除標記的行也應該是“簡單的”。

然后,再次刪除6700萬行中的99.4%將需要一些時間。

嘗試/ * + parallel(fe)* /。 沒有“ S”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM