Un Explain Plan
vous aurait montré pourquoi exactement vous devriez utiliser Exists
. Habituellement, la question vient Exists vs Count(*)
. Exists
est plus rapide. Pourquoi ?
-
En ce qui concerne les défis présentés par NULL :lorsque la sous-requête renvoie
Null
, pour IN la requête entière devientNull
. Donc, vous devez également gérer cela. Mais en utilisantExist
, c'est simplement unfalse
. Beaucoup plus facile à gérer. SimplementIN
ne peut rien comparer avecNull
maisExists
peut. -
par exemple.
Exists (Select * from yourtable where bla = 'blabla');
vous obtenez vrai/faux au moment où un résultat est trouvé/correspondant . -
Dans ce cas
IN
prend en quelque sorte la position duCount(*)
pour sélectionner TOUS correspondance des lignes en fonction deWHERE
car il compare toutes les valeurs.
Mais n'oubliez pas ceci non plus :
EXISTS
s'exécute à grande vitesse contreIN
:lorsque les résultats de la sous-requête sont très volumineux.IN
devanceEXISTS
:lorsque les résultats de la sous-requête sont très petits.
Référence à pour plus de détails :