L'ordre de l'index est important lorsque vos conditions de requête ne s'appliquent qu'à PART de l'indice. Considérez :
-
SELECT * FROM table WHERE first_name="john" AND last_name="doe"
-
SELECT * FROM table WHERE first_name="john"
-
SELECT * FROM table WHERE last_name="doe"
Si votre index est (first_name
, last_name
) les requêtes 1 et 2 l'utiliseront, la requête #3 ne le fera pas. Si votre index est (last_name
, first_name
) les requêtes 1 et 3 l'utiliseront, la requête #2 ne le fera pas. La modification de l'ordre des conditions dans la clause WHERE n'a aucun effet dans les deux cas.
Les détails sont ici
Mettre à jour :
Dans le cas où ce qui précède n'est pas clair - MySQL ne peut utiliser un index que si les colonnes dans les conditions de requête forment un préfixe le plus à gauche de l'index. La requête 2 ci-dessus ne peut pas utiliser (last_name
, first_name
) index car il est uniquement basé sur first_name
et first_name
n'est PAS le préfixe le plus à gauche du (last_name
, first_name
) indice.
L'ordre des conditions DANS la requête n'a pas d'importance; la requête 1 ci-dessus pourra utiliser (last_name
, first_name
) indexe très bien car ses conditions sont first_name
et last_name
et, pris ensemble, ils forment un préfixe le plus à gauche de (last_name
, first_name
) indice.