10
votes

Sélectionnez la déclaration qui n'utilise pas possible_keys

J'ai une table à partir d'un système hérité qui n'a pas de clé primaire. Il enregistre des données transactionnelles pour émettre des matériaux dans une usine.

Pour les simplicités Sake, disons que chaque ligne contient Job_Number, Part_number, Quantity & Date_Surée.

J'ai ajouté un index à la colonne Date délivrée. Lorsque j'explique une touche expliquée * à partir de délivré_parts où date_isturée> '20100101', cela montre ceci: xxx

donc il voit la clé, mais cela ne l'utilise pas? Quelqu'un peut-il expliquer pourquoi?


1 commentaires

Nommer une colonne clé ne le fait pas. Bien que je ne comprends pas complètement la question, attribuez la colonne clé comme clé primaire si vous souhaitez ce type de fonctionnalité. Sinon, vous aurez besoin de fournir plus d'informations (telles que le schéma actuel par exemple).


3 Réponses :


10
votes

Quelque chose me dit que l'optimiseur de requête MySQL a décidé correctement.

Voici comment vous pouvez dire. Exécutez ceci:

nombre de lignes xxx

nombre de lignes correspondant à votre requête xxx

si Le nombre de lignes que vous récupérez réellement dépasse 5% du nombre total de la table, l'optimiseur de requêtes MySQL décide qu'il serait moins effort de faire une analyse de la table complète.

MAINTENANT, si votre requête était plus exacte, Par exemple, avec ceci: xxx

alors, vous obtiendrez un autre plan d'explication différent.


4 commentaires

Votre réponse est techniquement correcte, mais «L'optimiseur de requêtes MySQL a décidé correctement» n'est pas. Je suis plus ou moins dans la même situation, et dans mon cas en utilisant la clé (la forçant) rend la requête beaucoup plus rapide.


J'envie 1500 records sur 200k. Toujours pas de clé disponible utilisé.


Moi aussi ... 15 080 sur 709,743


@Kellogs, @serge, essayez d'utiliser Force Key < / Code> , ça marche pour vous?



0
votes

possible_keys noms des noms avec les colonnes correspondantes dans, mais cela ne signifie pas que chaque clé de cette clé va être utile pour la requête. Dans ce cas, aucun n'est.


0 commentaires

0
votes

Il existe plusieurs types d'index (indices?). Un indice de hachage est un moyen rapide de rechercher un élément donné d'une valeur spécifique. Si vous avez un tas de valeurs discrètes que vous interrogez, (par exemple, une liste de 10 dates), vous pouvez calculer un hachage pour chacune de ces valeurs et les rechercher dans l'index. Depuis que vous ne recherchez pas une valeur spécifique, mais plutôt une comparaison, un indice de hachage ne vous aidera pas.

D'autre part, un index B-Tree peut vous aider car il donne une commande aux éléments qu'il s'agit d'indexation. Par exemple, voir ici: http://dev.mysql.com /doc/refman/5.0/fr/mysql-indexes.html pour MySQL (recherche des caractéristiques de l'index des arbres B). Vous voudrez peut-être vérifier que votre table utilise un index B-Tree pour sa colonne d'index.


0 commentaires