Trouver les index MySQL inutiles

le 30/06/2008 à 23:13
Trouver les index MySQL inutiles
Arjen Lentz propose la requête suivante pour détecter les index qui ne servent à rien dans MySQL :

SELECT s.table_name, concat(s.index_name,'(',group_concat(s.column_name order by s.seq_in_index),')') as idx, GROUP_CONCAT(s.cardinality ORDER BY s.seq_in_index) AS card, t.table_rows FROM information_schema.tables t JOIN information_schema.statistics s USING (table_schema,table_name) WHERE t.table_schema='dbname' AND t.table_rows > 1000 AND s.non_unique GROUP BY s.table_name,s.index_name HAVING (card + 0) < (t.table_rows / 3);

La requête utilise la base information_schema (MySQL 5.0 et supérieur), pour repérer les index dont la cardinalité est inférieure à 30% : c'est le niveau à partir duquel MySQL va décider que l'index est utile, et en dessous de ce niveau, MySQL décidera d'ignorer l'index et de tout analyser. Cela revient à décider de tout ranger quand le désordre est tellement grand que corriger les erreurs sera beaucoup plus long encore.

- Arjen's Journal - Finding useless indexes

Commentaires

Ecrire

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours