2009-10-23 6 views
4

J'essaie de comprendre ce que je fais mal. Cette requête ne semble pas utiliser l'index, car il prend trop de temps.MySQL - Ne pas utiliser l'index

Lors de l'exécution:

Explain SELECT a, b, c, d FROM `table` WHERE d = 4013456 

id  select_type  table  type possible_keys  key  key_len  ref  rows Extra` 
1  SIMPLE   table  ALL  d     NULL NULL  NULL 79787 Using where` 
index: 
d INDEX  79787 

Y at-il quelque chose que je fais mal? la requête à l'intérieur de l'explication prend 10 secondes ... semble comme si elle devrait prendre moins d'une seconde.

Merci!

+1

Quelle est la sortie de 'SHOW CREATE TABLE yourtablename;'? – Asaph

+1

est une chaîne ou un nombre? – northpole

+1

Lorsque j'essaie, il me montre un petit extrait de l'exec de la table create, je ne pense pas que l'option pour (debug complet?) Est activée pour mon serveur. – Petrogad

Répondre

7

La raison pour laquelle votre index n'est pas utilisé est que d est un varchar (vous l'avez mentionné dans un commentaire) et vous avez un entier dans votre clause where. Si vous changez votre requête:

SELECT a, b, c, d FROM `table` WHERE d = '4013456'; 

il sera plus susceptible d'utiliser un index. Mais une meilleure solution pourrait être de changer la colonne en entier et laisser la requête seule (si c'est possible compte tenu de vos autres circonstances).

+0

bien ne me sens pas comme un idiot :) – Petrogad

+1

c'est bon, vous seriez surpris de voir combien de fois je me heurte à cela. Beaucoup de programmeurs ne sont pas conscients des conséquences de l'exclusion des citations. – northpole

2

Si d est un varchar, vous devez le mettre entre guillemets. Laissant les citations dehors n'utilisera pas l'index correctement.

Questions connexes