2つのクエリがあります。パフォーマンスとメモリのどちらが優れているかを理解したいと思います。私はまた、これらの2つのための他の選択肢を歓迎します。Oracleのパフォーマンスとメモリ
クエリ1:ここでは
SELECT DISTINCT a.no,
a.id1 ,
a.id2
FROM tbl_b b ,
tbl_a a ,
tbl_c c ,
tbl_d d
WHERE (
b.id1 = a.id1
AND a.id1 = c.id1
AND upper(c.flag) = 'Y'
AND c.id1 = d.id1
)
OR (
b.id2 = a.id2
AND a.id2 = c.id2
AND upper(c.flag) = 'Y'
AND c.id2 = d.id2
)
AND d.id3 = 10
テーブルbとdが表Aは比較的小さいながらに50万人以上の数百万行、 を実行している非常に大規模なテーブルです。
私の要件は、id、id1またはid2のいずれかのidを持つテーブルaのレコードだけをb、c、dテーブルで利用できるようにして、特定の条件を満たすものです。
私が手に持っている別のクエリが
クエリ2:
SELECT DISTINCT a.no,
a.id1 ,
a.id2
FROM tbl_a a
where exists (select a.id1, a.id2 from
tbl_c c where ((a.id1 = c.id1 or a.id2 = c.id2)
AND upper(c.active_flag) = 'Y'))
and exists (select a.id1, a.id2 from
tbl_b b where b.id1 = a.id1 or b.id2 = a.id2)
and exists (select a.id1, a.id2 from tbl_d d
where (a.id1 = d.id1 or a.id2 = d.id2)
AND d.id3 = 10)
最高のパフォーマンスが賢明ですか?私は、クエリ2はクエリ1よりも少ない領域を占めることを理解しています。 しかし、どのように最適なものを選択しますか?
こんにちはトニー、私の間違いだった..私はparanthesisを逃した。私は今、クエリを更新しました、それは((aまたはb)とc)私の状態です。 –
OK、カッコについてのコメントを削除しました。 2つのクエリが論理的に同等であることから、私はさらに満足しています。 –
+1、可能であれば、いつでも自分で試してみてください。 – DCookie