Détails
NOT IN vs NOT EXISTS
Laquelle de ces requêtes est la plus rapide ?
NON EXISTANT :
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Ou NOT IN :
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Le plan d'exécution de la requête indique que les deux font la même chose. Si c'est le cas, quelle est la forme recommandée ?
Ceci est basé sur la base de données NorthWind.
[Edit]
Je viens de trouver cet article utile : http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Je pense que je vais m'en tenir à NOT EXISTS.
502
3
Si le planificateur d'exécution dit qu'ils sont identiques, ils sont identiques. Utilisez celle qui rendra votre intention plus évidente -- dans ce cas, la seconde.
En fait, je crois que ce serait le plus rapide :
Ça dépend...
ne serait pas relativement lent, car il n’y a pas beaucoup de limites à la taille de ce que la requête vérifie pour voir s’il y a une clé. EXISTS serait préférable dans ce cas.
Mais, selon l’optimiseur du SGBD, il pourrait en être de même.
Voici un exemple de cas où EXISTS est préférable