INおよびNOT INの代わりにEXISTSおよびNOT EXISTSを使用すると、問合せのパフォーマンスが向上することがわかりましたが、 NOT INISとは対照的にNOT INをOUTER JOINに置き換えますか?NOT INをOracle Database 12cのNOT EXISTSおよびOUTER JOINに置き換える
たとえば、次のクエリは、PCという別のテーブルにないすべてのモデルをPRODUCTテーブルから選択します。記録のために、製品やPCのテーブルにはモデル値がnullではない:
select model
from product
where not exists(
select *
from pc
where product.model = pc.model);
次OUTER JOINを同じ結果が表示されます。これらは同じ値を返すの両方として
select product.model
from product left join pc
on pc.model = product.model
where pc.model is null;
は見て、どのオプションを使用してクエリのパフォーマンスを改善する必要がありますか?
2つは同じである必要があります。オラクルは最適なオプティマイザを備えており、これらの両方が半アンチ・ジョインの表現方法です。 –
"INの代わりにEXISTSを使用し、NOT INISを使用するとクエリのパフォーマンスが向上することを理解しています。"ある場合には。他のケースでは、INまたはNOT INがより良いパフォーマンスを示します。パフォーマンスは、駆動クエリとサブクエリの相対的なサイズに依存します。 – APC