10.6 Comment MySQL optimise les LEFT JOIN

Avec MySQL, les commanndes LEFT JOIN B sont implémentées comme suit :

  • La table B est marquée comme étant dépendante de la table A.
  • La table A est marquée comme étant dépendante de toutes les tables (sauf B) qui sont utilisées dans la condition LEFT JOIN.
  • Toutes les conditions LEFT JOIN sont transformées en clause WHERE.
  • Toutes les optimisations standard de regroupement sont effectuées, à l'exception près qu'une table n'est lue qu'après toutes les tables dont elle dépend. Si il y a une référence circulaire MySQL retournera une erreur.
  • Toutes les optimisations standard de WHERE sont effectuées.
  • Si une ligne de la table A satisfait la clause WHERE, mais qu'il n'y a aucuen ligne dans la table B pour satisfaire la condition LEFT JOIN, alors une nouvelle ligne est générée dans B avec toutes ses valeurs mises à NULL.
  • Si vous utilisez un LEFT JOIN pour rechercher des lignes qui n'existent pas dans uen table, et que vous avez le test suivant : column_name IS NULL dans la clause WHERE, où column_name est une colonne déclarée NOT NULL, alors MySQL arrêtera de cherche d'autres lignes (pour une combinaison particulière de clés) dès qu'il aura trouvé une ligne qui satisfait la condition LEFT JOIN.