Comment déterminer la taille des index dans MySQL

Je veux déterminer la taille de mes index, ce sont des index de clé primaire. Cela arrive sur le cluster mysql mais je ne pense pas que ce soit significatif.

Je pense que c’est ce que vous recherchez.

show table status from [dbname] 

http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

Si vous utilisez des tables InnoDB, vous pouvez obtenir la taille des index individuels à partir de mysql.innodb_index_stats . La statistique ‘size’ contient la réponse, en pages, vous devez donc la multiplier par la taille de la page, soit 16 Ko par défaut .

 select database_name, table_name, index_name, stat_value*@@innodb_page_size from mysql.innodb_index_stats where stat_name='size'; 

Extension de la réponse de Vajk Hermecz.
Voici comment vous pouvez obtenir la taille de tous les index, en mégaoctets, sans le PRIMARY (qui est la table elle-même), classés par taille.

 SELECT database_name, table_name, index_name, round(stat_value*@@innodb_page_size/1024/1024, 2) size_in_mb FROM mysql.innodb_index_stats WHERE stat_name = 'size' AND index_name != 'PRIMARY' ORDER BY 4 DESC; 

Sur MyISAM , chaque bloc d’index contient 4 KB page remplis dans fill_factor avec des notices d’index, chacune ayant key length + 4 octets.

Fill factor est normalement 2/3

Quant à InnoDB , la table est toujours groupée sur la PRIMARY KEY , il n’y a pas d’index PRIMARY KEY séparé

Inutilisé par moi, mais peut-être MySQL Index Analyzer peut être utile.

En utilisant phpMyAdmin, lors de la visualisation de la structure de la table, il y a un lien Détails en bas quelque part. Une fois que vous avez cliqué dessus, il vous indiquera la taille totale des index que vous avez sur la table où il est marqué Espace.

Je ne pense pas que cela vous montre chaque index individuellement.

Dans cet article, déterminez comment calculer la taille de l’index. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/

Voici une adaptation de certains des éléments ci-dessus pour vous donner également le pourcentage de l’index total de la table que chaque index a utilisé, en espérant que cela sera utile pour quelqu’un.

 select database_name, table_name, index_name, round((stat_value*@@innodb_page_size)/1024/1024, 2) SizeMB, round(((100/(SELECT INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES t WHERE t.TABLE_NAME = iis.table_name and t.TABLE_SCHEMA = iis.database_name))*(stat_value*@@innodb_page_size)), 2) `Percentage` from mysql.innodb_index_stats iis where stat_name='size' and table_name = 'TargetTable' and database_name = 'targetDB' 

Exemple de sortie

 database_name table_name index_name SizeMB Percentage targetDB TargetTable id 10 55.55 targetDB TargetTable idLookup 5 27.77 targetDB TargetTable idTest 3 16.66 

Cordialement Liam