Compte tenu de la requête ci-dessous
SELECT * FROM tableA
LEFT JOIN tableB ON tableB.id = tableA.id
WHERE tableA.name = 'e'
.
tableA tableB
----------- -----------
id name id school
----------- -----------
1 a 1 AA
2 b 2 BB
3 c 3 CC
4 d 4 DD
5 e 5 EE
.
Ce qui me déroute, c'est le processus qui se déroule derrière.
Le système joint-il d'abord tableA et tableB avant de sélectionner uniquement la ligne de la clause WHERE?
Si oui, qu'en est-il de cette requête
SELECT * FROM
(
SELECT * FROM tableA
WHERE name = 'e'
) A LEFT JOIN tableB ON tableB.id = A.id
Cette requête sélectionne-t-elle d'abord en utilisant la clause WHERE avant de JOINDRE l'autre table?
Désolé, je ne trouve pas la réponse sur le Web. Je voulais réduire la bande passante des ressources MySQL. La deuxième requête est-elle la meilleure pour cette situation?
L'optimiseur de requête décidera et c'est assez intelligent.
SELECT * FROM tableA
LEFT JOIN tableB
ON tableB.id = tableA.id
WHERE tableA.name = 'e'
Il existe de nombreux cas où la jointure en premier est plus efficace. Si le nom est indexé et que "e" est quelque peu unique, le faire en premier est plus efficace.
Ceci est différent
SELECT * FROM tableA
LEFT JOIN tableB
ON tableB.id = tableA.id
WHERE tableB.school = 'EE'
Cela transforme la jointure gauche en jointure interne, mais comme il existe une correspondance dans vos données, vous obtiendrez les mêmes résultats.