データ分布の説明がないため、この質問に答えることは実際には不可能です: 各テーブルには何行ありますか? テーブル間の関係は何ですか?削除の影響を受ける行数は?
両方のテーブルが大きく (これは最適化の問題であるため) 、親子 1..N の関係があると仮定BI_EMPLOYEE
します。BI_EMPLOYEE_ACTIVITY
削除の影響を受ける行がほとんどない場合、これは同じ従業員が多くなくPRODUCT_ID
、各従業員の活動が少ないことを意味します。この場合、 と の両方にインデックスを付けるのが理にかなっていBI_EMPLOYEE (product_id)
ますBI_EMPLOYEE_ACTIVITY (employee_id)
。
これはおそらくそうではありませんが、削除はおそらく多くの行に影響します。その場合、インデックスが邪魔になる可能性があります。削除が多くの行に影響する場合、最速のアクセス パスはおそらくFULL TABLE SCAN + HASH JOIN
.
ここでいくつかのメトリクスが必要です: 削除された行数は? それはどのくらいかかりますか?これは、大規模な DML は常に時間がかかるためです。特にDELETE
、大量の UNDO が生成されるためです。
asktomの「Deleting many rows from a big table」DELETE
で説明されているように、大きな に代わるものがあります。
- 削除された行なしでテーブルを再作成します
- データを分割し、並列削除を行う
- パーティションを削除することによって削除が行われるように、データを分割します