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

La clause MySQL IN exécute-t-elle la sous-requête plusieurs fois ?

Votre hypothèse est fausse; la sous-requête ne sera exécutée qu'une seule fois. La raison pour laquelle c'est plus lent qu'une jointure est que IN ne peut pas profiter des index ; il doit parcourir ses arguments une fois pour chaque fois que le WHERE clause est évaluée, c'est-à-dire une fois par ligne dans tableA. Vous pouvez optimiser la requête, sans utiliser de variables ni de procédures stockées, simplement en remplaçant le IN avec une jointure, donc :

SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

À moins que cela ne vous dérange pas de récupérer tous les champs des deux tables, vous devez énumérer les champs que vous voulez dans le SELECT clause; tableA.* , par exemple, provoquera une erreur de syntaxe.