Yani IN, EXISTS ile aynı değildir ve aynı uygulama planını üretecektir.
EXISTS genellikle ilişkili bir alt sorguda kullanılır, bu da EXISTS iç sorgusunu dış sorgunuzla birleştireceğiniz anlamına gelir. Bu, dış sorgu birleşimlerini çözmeniz gerektiğinden ve iç sorgu birleştiğinden sonuç üretmek için daha fazla adım ekleyecek ve ardından her ikisini de birleştirmek için where cümlelerini eşleştirecektir.
Genellikle IN, iç sorguyu dış sorgu ile ilişkilendirmeden kullanılır ve bu yalnızca bir adımda çözülebilir (en iyi durum senaryosunda).
Bunu düşün:
IN kullanırsanız ve iç sorgu sonucu milyonlarca farklı değer satırı ise, EXISTS sorgusunun yüksek performanslı olduğu (dış sorgu ile birleştirmek için doğru dizinlere sahip olduğu) göz önüne alındığında, muhtemelen EXISTS'den DAHA DAHA YÜKSEK performans gösterecektir.
EXISTS kullanırsanız ve dış sorgunuzla birleştirme karmaşıksa (gerçekleştirilmesi daha fazla zaman alır, uygun dizin yok) dış tablodaki satır sayısına göre sorguyu yavaşlatır, bazen tamamlanması için tahmini süre gün cinsinden olabilir. Verilen donanımınız için satır sayısı kabul edilebilir düzeydeyse veya verilerin önem düzeyi doğruysa (örneğin, büyük bir veri kümesinde daha az DISTINCT değeri) IN, EXISTS'den daha hızlı performans gösterebilir.
Yukarıdakilerin tümü, her bir tabloda makul miktarda satırınız olduğunda not edilecektir (adil olarak, CPU işlemlerinizi ve / veya önbelleğe alma için ram eşiklerinizi aşan bir şeyi kastediyorum).
Yani CEVAP BAĞIMLIDIR. IN veya EXISTS içinde karmaşık bir sorgu yazabilirsiniz, ancak genel bir kural olarak, çok sayıda farklı değere sahip çok sayıda satırınız olduğunda, sınırlı sayıda farklı değer ve EXISTS ile IN kullanmayı denemelisiniz.
İşin püf noktası, taranacak satır sayısını sınırlamaktır.
Saygılarımızla,
MarianoC