1

次のテーブルがあるとします: r(a, b, c) ここで、a は何らかの整数で、テーブルには 50 行あります s(d, e, f, a) sa は ta の外部キーです 各タプルは 400 バイトですこれは SQL データベースであるため、s はマルチセットです。s は約 100 万タプルを保持します。テーブルが追加されると、データベース サーバーはテーブルの主キー列にインデックスを自動的に作成します。たとえば、t は a にインデックスを持ちます。ただし、Oracle は、外部キーである列には索引を作成しません。したがって、s にはインデックスがありません。t から 15 行を削除します。1) t に同じ a 値を持つ行を s から削除します。これには 10 分かかります。2) 次に、ステートメント DELETE FROM t WHERE a IN (削除しようとしている値、正確には 15 個の値) を実行します。これには約 6 時間かかります。

したがって、t のすべてのタプルについて、a の値をクエリ リスト内のすべての値と比較しているため、2 番目のステップには長い時間がかかると思います。では、このクエリを最適化して同じ結果を得るにはどうすればよいでしょうか!?

4

1 に答える 1

0

結合を使用すると、IN やサブクエリを使用するよりも CRUD 操作が高速になります

例:

DELETE FROM t 
INNER JOIN S ON t.a = S.a 

お役に立てれば

于 2012-11-07T10:53:12.983 に答える