Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sous-requêtes avec EXISTS vs IN - MySQL

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 devient Null . Donc, vous devez également gérer cela. Mais en utilisant Exist , c'est simplement un false . Beaucoup plus facile à gérer. Simplement IN ne peut rien comparer avec Null mais Exists 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 du Count(*) pour sélectionner TOUS correspondance des lignes en fonction de WHERE car il compare toutes les valeurs.

Mais n'oubliez pas ceci non plus :

  • EXISTS s'exécute à grande vitesse contre IN  :lorsque les résultats de la sous-requête sont très volumineux.
  • IN devance EXISTS  :lorsque les résultats de la sous-requête sont très petits.

Référence à pour plus de détails :