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

Utilisation de SELECT dans SELECT dans la requête mysql

Dans MySQL, faire une sous-requête comme celle-ci est une "requête corrélée". Cela signifie que les résultats du SELECT externe dépendent du résultat du SELECT intérieur . Le résultat est que votre requête interne est exécutée une fois par ligne, ce qui est très lent.

Vous devez refactoriser cette requête ; que vous rejoigniez deux fois ou que vous utilisiez deux requêtes n'est généralement pas pertinent. Rejoindre deux fois vous donnerait :

SELECT something
FROM posts
INNER JOIN tag_map ON tag_map.id = posts.id
INNER JOIN tags ON tags.tag_id = tag_map.tag_id
WHERE tags.tag IN ('tag1', ...)

Pour plus d'informations, consultez le manuel MySQL sur convertir les sous-requêtes en JOIN .

Conseil :EXPLAIN SELECT vous montrera comment l'optimiseur prévoit de traiter votre requête. Si vous voyez DEPENDENT SUBQUERY vous devriez refactoriser, ils sont méga-lents.