1

状況:

  • テーブル TBL には、削除するエントリが最大 10,000 あります。
  • テーブル TBL には、削除ルール「アクションなし」の 14 の子テーブルがあり、
  • 子テーブルの 10k エントリと参照エントリを削除したい。

手順:

  • 子テーブルのレコードを削除し、
  • 制約を無効にする (制約が無効になっていない場合、次のステップでの削除には永遠に時間がかかります)、
  • TBL テーブルのレコードを削除し、
  • 制約を有効にします。

これを行うためのよりエレガントな方法はありますか?

問題は、存在しないレコードの存在について 14 の大きなテーブルをチェックしているため、3 番目のステップに時間がかかりすぎることです。私の手順は実行時間は良いですが、もっとエレガントな方法があると思います。

4

1 に答える 1

3

子テーブルの外部キーにインデックスを付ける必要があるようです。子テーブルにインデックスがない親レコードを削除するたびに、子の全表スキャンを実行して、外部キー制約が破られているかどうかを確認する必要があります。

インデックスを使用すると、最悪の場合、インデックス範囲スキャンになります。

編集:詳細情報、およびこれが問題であるかどうかを判断するためのスクリプトは、ここにあります。 http://asktom.oracle.com/tkyte/unindex/index.html

于 2009-01-30T14:45:36.580 に答える