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. SimplementINne peut rien comparer avecNullmaisExistspeut. -
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
INprend en quelque sorte la position duCount(*)pour sélectionner TOUS correspondance des lignes en fonction deWHEREcar il compare toutes les valeurs.
Mais n'oubliez pas ceci non plus :
EXISTSs'exécute à grande vitesse contreIN:lorsque les résultats de la sous-requête sont très volumineux.INdevanceEXISTS:lorsque les résultats de la sous-requête sont très petits.
Référence à pour plus de détails :