2010-05-24 5 views
0

J'ai une table en MySQL avec 7 index, la plupart d'entre eux sont sur plus d'une colonne. Je pense que voici trop d'index. Yat-il un moyen d'obtenir des statistiques de quels index sont utilisés plus par des milliers de requêtes à cette base de données et ce qui sont moins dignes de sorte que je sais quel indice à considérer en premier lieu?Comment reconnaître quels index ne sont pas utilisés?

Répondre

3

Vous pouvez essayer de déterminer which indexes are used at all.

Cependant, dans la mesure comme une liste par utilité, désolé, il n'y a pas de façon intégrée de le faire, et je ne pense pas que l'Analyseur de requêtes fasse cela.

Il semblerait que vous deviez effectuer un audit pour déterminer les requêtes en cours d'utilisation qui affectent cette table, et expliquez-les pour voir si elles utilisent l'un de vos index.

Il existe un rapport de bug requesting this feature.

0

Ce n'est pas une manière spécifique de le faire, mais vous pourriez être en mesure de le dire. Essayez EXPLAIN SELECT... et il vous montrera ce que les tables sont utilisées, le nombre de lignes, etc., etc. Cela devrait vous donner suffisamment de données pour accélérer votre table

+0

Oui, mais j'ai tant de questions –

0

Activer l'enregistrement des requêtes générales en production. Oui, je sais que c'est une douleur, et je sais que cela aura un impact sur votre serveur de production, mais BITE THE BULLET. Ce sera utile plus tard. Laissez-le allumé indéfiniment si possible (bien sûr, assurez-vous que la rotation, la compression et l'expiration du journal fonctionnent et surveillez l'utilisation de l'espace disque, dites à Ops comment l'éteindre si de mauvaises choses se produisent)

Ensuite, vous pouvez commencer à jouer avec des outils comme mk-query-digest qui exécutera EXPLAIN sur toutes vos requêtes (faites cela par rapport à une base de données non-production, bien sûr, mais utilisez une sauvegarde récente de votre production db).

Ceci vous permettra de dire quels index sont utilisés et avec quelle fréquence. Au moins, si EXPLAIN ne ment pas et votre serveur de test utilise le même plan que la production.

Ou du moins, il le fera surtout. EXPLAIN ne vous dit pas encore comment les requêtes DELETE, UPDATE fonctionnent.

Questions connexes