Quelle jointure est la plus performante si toutes fournissent le même résultat? Par exemple, j'ai deux tables employees(emp_id,name, address, designation, age, sex)
et work_log(emp_id,date,hours_wored)
. Pour obtenir des résultats spécifiques, les deux inner join
et left join
donne le même résultat. Mais, j'ai encore quelques doutes qui ne se limitent pas à cette seule question.
Il n'y a pas de type de jointure "meilleur" ou "pire". Ils ont une signification différente et doivent être utilisés en fonction de celle-ci.
Dans votre cas, vous n'avez probablement pas d'employés sans work_log (pas de lignes dans cette table), donc LEFT JOIN
et JOIN
seront équivalents dans les résultats. Cependant, si vous aviez une telle chose (un nouvel employé sans journal de travail enregistré), un JOIN
wold omettrait cet employé, tandis qu'une jointure gauche (dont la première table est des employés) les afficherait tous, et serait nulle sur les champs de work_log s'il n'y a pas de correspondance.
Encore une fois, les performances sont une chose secondaire pour interroger l'exactitude. Certaines personnes disent que vous ne devriez pas utiliser LEFT JOIN
s. Il est vrai qu'un LEFT JOIN force l'optimiseur à exécuter la requête dans un ordre particulier, empêchant certaines optimisations (réorganisation des tables) dans certains cas. Voici un exemple . Mais vous ne devez pas choisir l'un plutôt que l'autre si l'exactitude/la signification est sacrifiée, car une INNER JOIN n'est pas intrinsèquement pire. Le reste des optimisations habituelles s'appliquent comme d'habitude.
En résumé, n'utilisez pas LEFT JOIN
si vous voulez vraiment dire INNER JOIN
.
Dans MySQL CROSS JOIN
, INNER JOIN
et JOIN
sont identiques. Dans la norme, et sémantiquement, un CROSS JOIN
est un INNER JOIN
sans clause ON
, vous obtenez donc toutes les combinaisons de lignes entre les tables.
Vous avez exemples de tous les types de jointures sémantiques sur Wikipedia . En pratique, dans MySQL, nous avons tendance à écrire uniquement JOIN
et LEFT JOIN
.
Quelle jointure est plus performante si toutes fournissent le même résultat?
J'ajoute la réponse précédente, pour ce que je sais, MySQL est optimisé pour avoir les mêmes performances.
Avec de bons index, par exemple, JOIN
vs LEFT JOIN
+ WHERE
clause à filtrer, sera la même chose. Optimisation vs La lecture humaine prend tout son sens sur les grandes requêtes avec beaucoup de jointures.
L'utilisation de bons index et d'un bon cache est plus importante.
Vous pouvez lire une bonne explication du processus d'optimisation ici:
Le processus d'optimisation des requêtes : Une requête peut souvent être exécutée de différentes manières et produire le même résultat. Le travail de l’optimiseur consiste à trouver la meilleure option.