Oracle SQL - どこのスペースに3 "とexists()より高速ですか?
Select distinct id_no
from revenue_table
where (exists (select * from revenue_table i
where revenue_type = 'Shipping' and i.id_no = r.id_no)
and exists(select * from revenue_table i
where revenue_type = 'Reproduction' and i.id_no = r.id_no)
and exists(select * from revenue_table i
where revenue_type = 'Tape' and i.id_no = r.id_no))
id_noを書くためのより良い方法はありますが、フォーム上の各収入項目に対して一回表に入力されたフォームを表します。同じrevenue_typeが複数回表示されることがあります。 ORロジックを使用して動作する多くの高度な機能がありますが、ANDセット理論を使用する関数を見つけることはできません。もし、GROUP BYにid_noのようなグループを(配送、複製、テープ)のようなものと比較する機能があれば、本当にいいです。
これはありますか?
+1:テーブルのシングルスキャンは、私が言うことができる限りそれを打ち負かすつもりはありません。 – MatBailie
私はいくつかのテストを実行しました。実行している大きなテーブルで実行時間が約20%短縮されているように見えます。私は以前は "count(distinct)"ステートメントを使用することはなかった。 – Matt
@Matt - あなたは '(id_no、revenue_type)'のインデックスを持っていますか? – MatBailie