2009-09-30 8 views
2

Je ne suis pas familier avec la création d'index. Je suis actuellement en train de l'expérimenter pour découvrir comment cela fonctionne et dans quels cas une base de données utilisera l'index.MySQL ignore mon index

J'ai une table simple avec 3 colonnes; un identifiant, un nom et un statut. J'ai mis un index sur le nom qui est une colonne CHAR (30). Contre mes attentes, MySQL ne tient pas compte de cet indice dans la requête suivante:

SELECT * FROM people WHERE name = 'Peter' 
 
id select_type table type possible_keys key key_len ref rows Extra 

1 SIMPLE  people ref name   name 90  const 1  Using where 

Cependant, lorsque vous utilisez la requête suivante, l'index est utilisé:

SELECT COUNT(*) FROM people WHERE name = 'Peter' 
 
id select_type table type possible_keys key key_len ref  rows Extra 

1 SIMPLE  people ref name   name 90  const 1  Using where; Using index 

Quelqu'un pourrait-il s'il vous plaît expliquer cela pour moi?

Répondre

1

Pour chaque requête, les colonnes « key » indique « name » - donc, je dirais que vos deux requêtes à la fois utilisé l'index appelé « name », ce qui est probablement sur la colonne « name » - et cela est ce que vous voulez (citant le manual):

la colonne clé indique la clé (index) MySQL a décidé de utiliser. Si MySQL décide d'utiliser l'un des index pour rechercher les lignes , cet index est répertorié en tant que valeur clé .

, vous aussi ne traversez « 1 » ligne, ce qui est bon (pas balayage complet ou quelque chose comme ça).


Le « type » dit « ref », ce qui semble être une bonne chose:

Toutes les lignes avec l'index correspondant à des valeurs sont lues dans ce tableau pour chaque combinaison de lignes de la précédente tables. ... Si la clé utilisée ne correspond qu'à quelques lignes, il s'agit d'une bonne jointure de type .

ref peut être utilisé pour les colonnes indexées qui sont comparées à l'aide de l'opérateur = ou < => .


Et la « ref » colonne indique « const » - pas sûr de ce que cela signifie exactement, mais pour autant que je sache, c'est une bonne chose.

Qu'est-ce qui vous fait penser que votre index n'est pas utilisé pour une colonne?

Tout comme une référence, pour plus d'informations: 7.2.1. Optimizing Queries with EXPLAIN

+1

Merci beaucoup d'avoir rendu cela clair. La raison pour laquelle je pensais que ce n'était pas utilisé était que je m'attendais à ce qu'il dise explicitement "USING INDEX" dans la colonne supplémentaire. Évidemment c'était assez stupide et j'aurais dû regarder moi-même les significations des colonnes de la table d'explication. Merci encore et mes excuses! –

+0

Pas de problème :-) Amusez-vous! –

+0

"const" signifie que vous recherchez une clé primaire ou un index unique en utilisant une constante, et qu'il y a au plus une ligne correspondante. Cela signifie que l'enregistrement peut être récupéré rapidement et ensuite conservé en mémoire où tous les autres enregistrements référençant des colonnes de celui-ci peuvent obtenir leurs données très rapidement. – Jay

3

"Utilisation index" signifie qu'il utilise l'index comme un "indice couvrant". Cela arrive quand il a seulement besoin d'accéder à l'index pour satisfaire la requête.Si, d'autre part, "Using index" est absent, mais dans la colonne "key", l'index est nommé, puis il utilise cet index de la manière décrite dans la colonne "ref". Dans les deux cas, il utilise l'index, mais seul COUNT() l'utilise comme index de couverture.

Questions connexes