Actualités
Image pour le titre du contenu
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.

Commentaires

Vous pouvez ajouter votre commentaire!


Vous devez vous connecter pour commenter