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

Laquelle est la plus rapide :sous-requêtes corrélées ou jointure ?

Premièrement, une sous-requête corrélée est vraiment un type de jointure. Il n'y a pas de règle d'or sur ce qui produit le meilleur plan d'exécution. Si vous êtes intéressé par la performance, vous devez essayer les différentes formes pour voir ce qui fonctionne le mieux. Ou, au moins, regardez les plans d'exécution pour prendre cette décision.

En général, j'ai tendance à éviter les sous-requêtes corrélées pour plusieurs raisons. Premièrement, ils peuvent presque toujours être écrits sans corrélation. Deuxièmement, de nombreux moteurs de requête les transforment en jointures de boucles imbriquées (bien qu'en utilisant des index), et d'autres stratégies de jointure pourraient être meilleures. Dans de tels cas, les sous-requêtes corrélées rendent difficile la parallélisation de la requête. Troisièmement, les sous-requêtes corrélées se trouvent généralement dans les clauses SELECT ou WHERE. J'aime que toutes mes tables soient dans la clause FROM.

Dans MySQL cependant, les sous-requêtes corrélées sont souvent les plus moyen efficace de faire une requête. Cela est particulièrement vrai lors de l'utilisation d'une sous-requête dans un IN clause. Il n'y a donc pas de règle d'or.