Welke van deze query's is het snelst?
NIET BESTAAN:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Of NIET IN:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Het query uitvoeringsplan zegt dat ze allebei hetzelfde doen. Als dat het geval is, welke is dan de aanbevolen vorm?
Dit is gebaseerd op de NorthWind database.
[Edit]
Vond net dit nuttige artikel: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Ik denk dat ik het bij NOT EXISTS houd.
Het hangt ervan af...
SELECT x.col
FROM big_table x
WHERE x.key IN( SELECT key FROM really_big_table );
zou niet relatief traag de is'niet veel te beperken grootte van wat de query controleren om te zien of ze sleutel is in. EXISTS zou in dit geval de voorkeur verdienen.
Maar, afhankelijk van de DBMS's optimizer, zou dit niet anders kunnen zijn.
Als voorbeeld van wanneer EXISTS beter is
SELECT x.col
FROM big_table x
WHERE EXISTS( SELECT key FROM really_big_table WHERE key = x.key);
AND id = very_limiting_criteria