1

私はCREATE TABLE2つの方法を使用して実行できるクエリを持っています(千/百万レコードの選択ステートメントとして作成):

最初の方法:

create table as select some data minus (select data from other table)

また

最初にテーブルを次のように作成する必要があります

create table as select .....

その後

delete from ..where exist.

2番目の方法の方が優れていると思います.どのクエリのコストが少ないですか?マイナスクエリが2番目の方法ほど速くないのはなぜですか? 編集: create ステートメントにも 2 つのテーブルからの結合があることを忘れていました。

4

2 に答える 2

5

マイナスはおそらく、テーブルを比較するためにディスク上のテーブルをソートする必要があるため、遅くなります。

NOT EXISTS最初のクエリをの代わりに で書き直してみてくださいMINUS。より高速になり、REDO と UNDO の生成が少なくなります (a_horse_with_no_name前述のとおり)。もちろん、WHERE句に含まれるすべてのフィールドがインデックス化されていることを確認してください!

于 2012-08-02T14:20:16.447 に答える
2

2 つ目は、大量のレコードをディスクに書き込んでから削除します。これは、10 件中 9 件のケースで、最初に書き込んだ内容をフィルタリングするよりも時間がかかります。

したがって、最初のものが実際に速くない場合は、関連するテーブルとステートメントに関する詳細情報が必要です。

于 2012-08-02T14:21:03.143 に答える