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

Join vs sous-requête

Les sous-requêtes sont la manière logiquement correcte de résoudre les problèmes de la forme "Obtenir les faits de A, sous réserve des faits de B". Dans de tels cas, il est plus logique de coller B dans une sous-requête que de faire une jointure. C'est également plus sûr, d'un point de vue pratique, puisque vous n'avez pas à vous méfier de l'obtention de faits en double de A en raison de plusieurs matchs contre B.

En pratique, cependant, la réponse se résume généralement à la performance. Certains optimiseurs sucent des citrons lorsqu'ils reçoivent une jointure par rapport à une sous-requête, et certains sucent des citrons dans l'autre sens, et cela est spécifique à l'optimiseur, à la version du SGBD et à la requête.

Historiquement, les jointures explicites gagnent généralement, d'où la sagesse établie selon laquelle les jointures sont meilleures, mais les optimiseurs s'améliorent tout le temps, et je préfère donc écrire les requêtes d'abord de manière logiquement cohérente, puis les restructurer si les contraintes de performances le justifient.