Je veux déterminer la taille de mes index, ce sont des index de clé primaire. Cela se trouve être sur le cluster mysql mais je ne pense pas que ce soit significatif.
88
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
Prolonger la réponse de Vajk Hermecz.
C'est ainsi que vous pouvez obtenir la taille de tous les index, en mégaoctets, sans le PRIMAIRE (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 size_in_mb DESC;
la source
ORDER BY size_in_mb DESC;
:?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, qui est de 16K par défaut .select database_name, table_name, index_name, stat_value*@@innodb_page_size from mysql.innodb_index_stats where stat_name='size';
la source
stat_value
est déjà multiplié par la taille de la page, donc la colonne donne la taille de l'index en octets.show table status from [dbname]
Sur
MyISAM
, chaque bloc d'index est4 KB
rempli d'une pagefill_factor
avec des enregistrements d'index, chacun d'unekey length + 4
longueur d'octets.Fill factor
est normalement2/3
Quant à
InnoDB
, la table est toujours clusterisée sur lePRIMARY KEY
, il n'y a pas d'PRIMARY KEY
index séparéla source
Voici une adaptation de certains des éléments ci-dessus pour vous donner également le pourcentage de l'indice total de la table que chaque index a utilisé, j'espère 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
Cordialement Liam
la source
En utilisant phpMyAdmin, lors de l'affichage de la structure du tableau, il y a un lien Détails quelque part en bas. Une fois que vous cliquez dessus, il vous montrera la taille totale des index que vous avez sur la table où il est marqué Utilisation de l'espace.
Je ne pense pas que cela vous montre chaque index individuellement.
la source
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/
la source
À partir de la référence MySQL 5.6
SELECT SUM(stat_value) pages, index_name, SUM(stat_value)*@@innodb_page_size size FROM mysql.innodb_index_stats WHERE table_name='t1' AND stat_name = 'size' GROUP BY index_name;
la source