“SQL Optimizer…” IN yerine EXISTS kullanımı

Posted by Zafer | Posted in SQL | Posted on 22-09-2008

Önerilmez

SELECT product_id, name FROM   products
WHERE  product_id IN ( SELECT product_id FROM   purchases )

Önerilir

SELECT product_id, name FROM   products pr
WHERE EXISTS ( SELECT 1 FROM   purchases pu WHERE   pu.product_id = pr.product_id )

IN bir listede aranan verinin olup olmadığını kontrol eder. EXISTS sadece kayıtların varlığını kontrol
ederken, IN ise gerçek verileri kontrol eder. Alt sorgularda EXISTS daha iyi sonuçlar verdiğinden tercih
edilmelidir.

Kaynak : SQL Tuning El Kitabı call 7/24

Comments (7)

  1. “EXISTS sadece kayıtların varlığını kontrol
    ederken, IN ise gerçek verileri kontrol eder.” Derken gerçekten kastın ne? Sahte veri diye bişiy mi var?

  2. “EXISTS sadece kayıtların varlığını kontrol eder” derken yukarıda bahsedilen örnekte eğer alt sorgudan kritere uygun bir kayıt veya kayıtlar varsa üstteki sorgu çalıştırılacak demektir. Yani bütün veriler için üstteki sorgu çalışmayacaktır. “IN” deyimi kullanıldığında ise sorgulama esnasında bütün veriler için iki sorgu da kullanılacaktır.

    Verilen iki örnekte iç içe sorgulama yapısından oluştuğu için alt sorgudan dönen tablo tipindeki sorgu sonucundan faydalanmaktadırlar.

  3. Çok sağol zafer hoca.Allah razzı olsun…Güzel ve sade bir anlatım..

  4. Teşekkür ederim C-Kart…

  5. güzel paylaşım.. tşkler..

  6. IN ve EXISTS hangi database’lerde calisir. MySQl, Oracle vs.

  7. MySQL ve MSSQL de çalışır ama oracle için deneme şansım olmadı fakat çalışmasa bile benzer şekilde bir ifade vardır.

Post a comment