2009-01-30 93 views
1

現狀:刪除多條記錄與子表

  • 表TBL有缺失〜10K項,
  • 表TBL與刪除規則「不採取行動」 14個表,
  • 我想刪除10k條目和子表中的引用條目。

步驟:

  • 刪除記錄的子表,
  • 禁用約束(如果約束是在下一步未被禁用刪除需要永遠),
  • 在TBL表中刪除記錄,
  • 啓用約束。

有沒有更優雅的方式來做到這一點?

問題是,第三步耗時過長,因爲它檢查存在不存在的記錄的14個大表。我的程序有很好的執行時間,但我認爲有更優雅的方式。

+0

您需要爲子表中的FK列編制索引。你做了14個FTS。那=慢。 14個索引查找=快速。 – 2009-01-30 16:27:17

回答

3

這聽起來像你需要索引你的子表上的外鍵。每次刪除子表上沒有索引的父記錄時,它都必須對子進行全表掃描,以檢查外鍵約束是否被破壞。

使用索引時,最壞的情況是索引範圍掃描。

編輯: 更多信息,以及一個腳本來確定這是否是你的問題可以在這裏找到。 http://asktom.oracle.com/tkyte/unindex/index.html

+0

這是一個很好的提示和AskTom鏈接(我投票了),但子表在這個FK索引。 – Chobicus 2009-01-30 15:12:42