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.
< Précédent   Suivant >

Commentaires

Vous pouvez ajouter votre commentaire!


Vous devez vous connecter pour commenter