削除に無限ループが発生しました。私はこの問題に対処するために多くの方法を試しましたが、まだ時間がかかります。私は可能な限り明確にしようとします。パーティション分割なしで大規模な削除(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
したがって、実際にそれ `sは、6.3M + 6.3M + 1.2M + 1行削除する
Here`s制約所与POOL_IDに依存して行われます。そう
- ないパーティション
- Oracleバージョン9
- オンラインすべての時間ダウンタイムもないCTAS
- 我々が使用することはできませんカスケード制約が
- 正規化は非常に重要ではありません
Here`s私が試した何:
は- バルク(
- は声明で削除では削除し、存在する句)
- 各レベルと1レベル参加の一時テーブル
- pro交代してコミットする20k
1時間以下のような適切な時間枠で働いた人はいません。列の値の1つに基づいて削除を行うことができないという事実は、役に立たない。方法はありますか?
何時間もかかりましたか?これはあなたが日常的にやっていることですか? – derobert
合意。あなたが 'table_1'の単一レコードに基づいて' table_4'からレコードを削除しようとしているのを見て、これはしばらく時間がかかると思います。オプティマイザが別の/追加のインデックスを使用できる場合、たとえばWHERE句に条件を追加すると削除速度が向上することに注意してください。たとえば、すべての行に任意の値の前に(記録された) 、または "A"などで始まるテキストを含んでいてもかまいません。あなたはここでコミットメントコントロールを必要としないかもしれません... –
テーブルの大きさはどれくらいですか?すなわち、 6.3Mレコードの大部分か小さい部分ですか? –