Tout d'abord, pour comparer les deux d'abord, vous devez distinguer les requêtes avec des sous-requêtes:
- une classe de sous-requêtes ont toujours équivalent requête écrite avec des jointures
- une classe de sous-requêtes qui ne peut pas être réécrite en utilisant les jointures
Pour la première classe de requêtes un bon SGBD va voir les jointures et sous-requêtes, comme l'équivalent, et produisent même des plans de requête.
Ces jours-ci, même mysql.
Pourtant, parfois, il n'est pas, mais cela ne signifie pas que les jointures de toujours gagner - j'ai eu le cas lors de l'utilisation de sous-requêtes mysql amélioration de la performance. (Par exemple, si il ya quelque chose de prévention de mysql planificateur de correctement estimer le coût et si le planificateur de ne pas voir la jointure de la variante et de la sous-requête-variante comme même, alors les sous-requêtes peuvent surpasser les jointures en imposant un certain chemin d'accès).
La Conclusion est que vous devez tester vos requêtes pour les joindre et de sous-requête des variantes si vous voulez être sûr que l'on va faire mieux.
Pour la deuxième classe, la comparaison n'a de sens que ces requêtes ne peut pas être réécrite en utilisant des jointures et dans ces cas, les sous-requêtes sont une façon naturelle de faire les tâches nécessaires et vous ne devriez pas faire de discrimination contre eux.