2009年3月30日月曜日

Oracle:DISTINCTをEXISTSで代替する

1対多の結合処理で有効
select distinct d.no d.name from dept d, emp e where d.no = e.no
これは若干遅い。
理由は、distinct句をつけると暗黙のソート処理(※)が行われるため。

select d.no,d.name from dept d, emp e where
exists (select 'X' from emp e where d.no = e.no)

※order by以外でも、
distinct
group by
union
intersect
minus
等は暗黙のソートが実施される。

0 件のコメント: