NOT IN vs NOT EXISTS
Bu sorgulardan hangisi daha hızlıdır?
MEVCUT DEĞİL:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Ya da İÇERDE DEĞİL:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Sorgu yürütme planı, her ikisinin de aynı şeyi yaptığını söylüyor. Eğer durum buysa, önerilen biçim hangisidir?
Bu, NorthWind veri tabanına dayanmaktadır.
[Düzenle]
Bu yararlı makaleyi yeni buldum: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Sanırım VAR OLMAYAN ile devam edeceğim.
502
3
Eğer uygulama planlayıcısı aynı olduklarını söylüyorsa, aynıdırlar. Hangisi niyetinizi daha açık hale getirecekse onu kullanın - bu durumda ikincisini.
Aslında, bunun en hızlısı olacağına inanıyorum:
Değişir.
nispeten yavaş olmayacaktır, anahtarın içinde olup olmadığını görmek için sorgunun kontrol ettiği boyutu sınırlamak için fazla bir şey yoktur. Bu durumda EXISTS tercih edilebilir.
Ancak, DBMS'nin optimize edicisine bağlı olarak, bu farklı olmayabilir.
EXISTS'in ne zaman daha iyi olduğuna bir örnek olarak