Mysql
 sql >> Base de données >  >> RDS >> Mysql

Indices et ordre MySQL

L'ordre de l'index est important lorsque vos conditions de requête ne s'appliquent qu'à PART de l'indice. Considérez :

  1. SELECT * FROM table WHERE first_name="john" AND last_name="doe"

  2. SELECT * FROM table WHERE first_name="john"

  3. 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.