09-02-2010, 04:13 PM
Argorate a écrit :En théorie, si on a un bon SGBD il est censé s'occuper tout seul de faire les jointure avant les autres clauses WHERE (du moins c'est se qu'on nous a enseigné)En fait le SGBD optimise l'ordre d'exécution des jointures, qui peut donc être différent de l'ordre dans lequel elles apparaissent dans la requête. Si des clauses WHERE portent sur des tables issues de jointures, il les traitera effectivement en même temps que la jointure.
J'ai jamais essayé de voir si mysql était optimisable de se coté là, faudra que je test.
Par exemple, un
Code :
SELECT * FROM
a
INNER JOIN b ON a.id=b.id
WHERE b.id>100
est équivalent à
Code :
SELECT * FROM
a
INNER JOIN b ON a.id=b.id AND b.id>100
Il optimise aussi le choix des index utilisés, qui peut malgré tout être forcé avec USE KEY(mon_index).
Vive la commande EXPLAIN pour l'optimisation des requêtes :glace: