web-dev-qa-db-fra.com

Performances MySQL: JOIN ON vs WHERE

Doublons possibles:
MySQL: jointure interne vs où
jointures SQL explicites vs implicites SQL

Existe-t-il des différences de performances lorsque nous exécutons des requêtes de jointure à l'aide des clauses "JOIN ON" et "WHERE"? (quel que soit le nombre de tables ou le nombre d'entrées dans les tables)

Je ne sais pas si ce sujet a déjà été discuté. Même si c'est le cas, je souhaite savoir si avec les dernières versions de mySQL (5.1 et supérieures), les choses ont changé.

Une instruction Explain montre clairement une grande différence dans le nombre de lignes prises en considération.

La syntaxe que j'utilise est:

Utilisation de JOIN ON

SELECT <field names>
FROM <table1>
JOIN <table2> ON <join_condition>
AND JOIN <table3> ON <join_condition> 
AND JOIN <table4> ON <join_condition> 
.... 

Utilisation de WHERE

SELECT <field names> 
FROM <table names list separated by comma> 
WHERE <join_condition> 
AND <join_condition> 
AND <join_condition> 
.... 

Vous ne savez donc pas si l'utilisation de la clause JOIN ON ou WHERE ferait une différence. Veuillez aider.

28
Vasanthakumar V

Voici une bonne analyse de ces deux approches: jointure SQL gauche vs plusieurs tables sur la ligne FROM?

Cette explication est générale, je ne suis pas trop sûr de ce que MySQL fait dans ce domaine; mais de toute façon, le fait est qu'un JOIN est toujours plus explicite et clair et peut être déplacé d'un moteur à un autre sans changement majeur dans la logique de la requête.

3
DeveloperInToronto

Je soupçonne que l'utilisation de "JOIN" fait un "LEFT JOIN". Essayez d'utiliser un "INNER JOIN" et voyez si l'instruction d'explication est la même.

SELECT <field names>
FROM <table1>
INNER JOIN <table2> ON <join_condition>
INNER JOIN <table3> ON <join_condition> 
INNER JOIN <table4> ON <join_condition> 
...

Lorsque vous utilisez une jointure interne, je ne m'attendrais pas à ce qu'il y ait une différence de performances entre vos deux requêtes. Je m'inquiéterais davantage d'avoir les bons index. Assurez-vous que les conditions de jointure peuvent faire une correspondance à l'aide d'une colonne indexée.

2
Nick Clark