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.
Değişir.
SELECT x.col
FROM big_table x
WHERE x.key IN( SELECT key FROM really_big_table );
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
SELECT x.col
FROM big_table x
WHERE EXISTS( SELECT key FROM really_big_table WHERE key = x.key);
AND id = very_limiting_criteria