我遇到了一些無限循環,我的刪除。我嘗試了很多方法來解決這個問題,但仍然花費太多時間。我會盡可能地澄清。大規模刪除(需要2個連接),沒有分區
我有4個牽連表在這個問題。
缺失取決於給出
Table 1 contain the pool_id
Table 2 the ticket_id foreign join ticket_pool_id with the pool_id
Table 3 ticket_child_id foreign join ticket_id with the ticket_id
Table 4 ticket_grand_child_id foreign ticket_child_id join with the ticket_child_id
Concerned count for each
table 1---->1
table 2---->1 200 000
table 3---->6 300 000
table 4---->6 300 000
所以實際上它`6.3M + 6.3M + 1.2M + 1行被刪除
Here`s約束的pool_id的完成:
- 沒有分區
- Oracle版本9
- 網上所有的時間,所以無需停機既不CTAS
- 我們不能使用級聯約束
- 正常化是非常重要的
Here`s我的嘗試:
- 批量刪除
- with語句刪除(在和存在條款)
- 每個級別和1級加入的臨時表
- pro cedure和承諾每個20k
沒有那些在一個體面的時間框架內工作,如少於一個小時。我們無法基於某一列值刪除這一事實並不有幫助。有沒有辦法?
它花了一個小時怎麼了?這是你想要常規做的事嗎? – derobert
同意。假設您試圖從'table_1'中的單個記錄中刪除'table_4'中的記錄,我希望這會花費一些時間(即使有正確的標記,也是_long_)。請注意,如果優化器可以使用不同的/額外的索引,例如,如果您已經知道所有行在某個任意值之前都有(記錄的)創建日期,那麼向'WHERE'子句添加附加條件可以加快刪除速度,或者以「A」開頭的文本或其他內容。你可能不需要承諾控制在這裏... –
桌子有多大?即。是大部分記錄還是小部分? –