Který z těchto dotazů je rychlejší?
NEEXISTUJE:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Nebo NENÍ V:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Plán provádění dotazu říká, že oba dělají totéž. Pokud je to tak, který tvar je doporučený?
Toto vychází z databáze NorthWind.
[Upravit]
Právě jsem našel tento užitečný článek: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Myslím, že zůstanu u NOT EXISTS.
To záleží na..
SELECT x.col
FROM big_table x
WHERE x.key IN( SELECT key FROM really_big_table );
by nebylo relativně pomalé není'moc omezit velikost toho, co dotaz zkontrolovat, zda je klíč je v. EXISTS by bylo v tomto případě vhodnější.
Ale v závislosti na optimalizátoru DBMS'by to nemuselo být jinak.
Jako příklad, kdy je lepší EXISTS
SELECT x.col
FROM big_table x
WHERE EXISTS( SELECT key FROM really_big_table WHERE key = x.key);
AND id = very_limiting_criteria