select * from T1 where x in ( select y from T2 )
çalışması:
select *
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;
Subquery sonucta, distinct, ve indexli (hashed veya sorted) ve join yapmıs
original tabloyla.
Tersi ise
select * from t1 where exists ( select null from t2 where y = x )
Bunun calisması:
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
Bunun sonucu genelde full scan T1 yada ilk sorgunun indexli olması T1(x).
Sonucta, Exists daha uygun oldugu senaryo icin
Sunu soyleyebiliriz eger subqueyin sonucu ( select y from T2 ) cok buyukse
ve cok zaman alıyorsa kullanılabilir.
Eger subquery kucukse IN cok daha uygun bir secim olacaktır.
Eger her iki tabloda gercekten buyukse o zaman diger faktorleri dikkate almamız
gerekmektedir.
Bu faktorleri indexler gibi gorebiliriz.Bu faktorler index distinct gibi faktorler varsa
in performansı daha iyi olacağı düşünülebilir.
30.05.2008
In Exist KARSILASTIRLMASI
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder