In Exist KARSILASTIRLMASI

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.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s