10.4 Utilisation des index
Tous les index ( Les index sont utilisés pour :
Supposons que vous voulez exécuter la commande mysql> SELECT * FROM nom_table WHERE col1=val1 AND col2=val2;
Si un index multi-colonne existe avec
Si la table a des index multi-colonnes, tous les prefixes à gauches de l'index peut être utilisé par l'optimiseur pour retrouver les lignes. Par exemple, si vous avez un index de trois colonnes MySQL ne peut pas utiliser un index partiel si les colonnes ne forment pas la partie gauche d'un préfixe d'index. Supposons que vous ayez la commande suivante : mysql> SELECT * FROM nom_table WHERE col1=val1; mysql> SELECT * FROM nom_table WHERE col2=val2; mysql> SELECT * FROM nom_table WHERE col2=val2 AND col3=val3;
Si un index existe sur les colonnes
MySQL utilise aussi des index pour des comparaisons de type mysql> select * from nom_table where key_col LIKE "Patrick%"; mysql> select * from nom_table where key_col LIKE "Pat%_ck%";
Dans la première commande, seule les lignes Les commandes suivantes ne vont pas utiliser d'index : mysql> select * from nom_table where key_col LIKE "%Patrick%"; mysql> select * from nom_table where key_col LIKE other_col;
Dans la première, la clause
Effectuer des recherches en utilisant
MySQL utilise prioritairement des index qui vont trouver le minimum de ligne. Un index est utilisé lors des comparaisons qui impliquent une colonne et un opérateur
Un index qui ne comprend pas toutes les colonnes utilisées dans une clause Les requêtes suivantes utilisent des index : ... WHERE index_part1=1 AND index_part2=2 ... WHERE index=1 OR A=10 AND index=2 /* index = 1 OR index = 2 */ ... WHERE index_part1='hello' AND index_part_3=5 /* optimized like "index_part1='hello'" */ Les requêtes suivantes n'utilisent pas d'index : ... WHERE index_part2=1 AND index_part3=2 /* index_part_1 is not used */ ... WHERE index=1 OR A=10 /* No index */ ... WHERE index_part1=1 OR index_part2=10 /* No index spans all rows */ |