複数のテーブルを結合する場合と MINUS を使用してレコードを削除する場合のパフォーマンスを誰かが説明できることを願っています。他のいくつかのスタック オーバーフローの質問を見ましたが、探しているものが見つかりませんでした。
これら2つのクエリは同じ出力を生成すると思っていましたが、特にスタックオーバーフローの投稿から、「結合を使用して結合を使用してください!」と常に聞いていましたが、より高速であることが期待されていました...
これは私が実行した最初のクエリで、はるかに遅いと思っていましたが、実行には数分しかかかりません...
select some_id
from table1
MINUS
select some_id
from table2
where table2.value = 'some_value'
MINUS
select some_id
from table3
where table3.value = 'some_value'
group by some_id
これは私がより速いと思った 2 番目のクエリですが、現在 3 時間以上実行されています (終わりが見えない?)
select some_id
from table1
join table2 on table1.id=table2.id
join table3 on table1.id=table3.id
where table2.value = 'some_value'
or table3.value = 'some_value'
group by some_id
3 つのテーブルすべてに 100 万を超えるレコードがあり、それぞれ最大 1,500 万のレコードがあることに注意してください。
編集:
申し訳ありませんが、この 2 つのシナリオだけに興味があるので、この質問では NOT EXISTS の使用を回答として避けていたことをお知らせするつもりでした。