Je voudrais savoir laquelle est la meilleure en termes de performances entre les 2 requêtes indiquées ci-dessous ou fonctionnent-elles de manière identique?
Premier: [sans clause WHERE, juste AND avec ON]
SELECT related_tabid AS tabid, label, t.name
FROM relatedlists r
INNER JOIN tab t
ON t.tabid = r.tabid
AND t.name = 'Leads'
AND r.is_active=1 and r.related_tabid <> 0
AND t.is_active=1
ORDER BY label
Deuxième: [en utilisant la clause WHERE, ET associé à où au lieu de ON]
SELECT related_tabid AS tabid, label, t.name
FROM relatedlists r
INNER JOIN tab t
ON t.tabid = r.tabid
WHERE t.name = 'Leads'
AND r.is_active=1 and r.related_tabid <> 0
AND t.is_active=1
ORDER BY label
Les deux requêtes sont identiques car la jointure utilisée est INNER JOIN
. INNER JOIN
fondamentalement, il filtre uniquement les lignes qui ont au moins une correspondance sur l'autre table. Même les deux tables sont interchangeables, le résultat est toujours le même.
Mais si vous les rejoignez via LEFT JOIN
, les deux requêtes sont différentes l'une de l'autre et donneront un résultat différent.
Il me semble que la seule différence entre les deux requêtes est que l'une a le t.name = 'Leads'
dans la clause WHERE et on l'a dans la clause JOIN. Correct?
Il n'y a pas de différence entre les deux. L'optimiseur SQL les traitera de manière identique. Faites un EXPLICATION sur chacun d'eux pour vérifier.
En théorie, la première requête est bien juste de vouloir mettre la comparaison de texte dans le "où", puis rejoint la définition de la "logique" de l'union des tableaux et le "où" n'est utilisé que pour spécifier des valeurs qui varient lors de la comparaison Où t.name = 'Leads'; Cordialement