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.
Réponses:
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;
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';
stat_valueest 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 est 4 KBrempli d'une page fill_factoravec des enregistrements d'index, chacun d'une key length + 4longueur d'octets.
Fill factor est normalement 2/3
Quant à InnoDB, la table est toujours clusterisée sur le PRIMARY KEY, il n'y a pas d' PRIMARY KEYindex séparé
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
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
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.
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/
À 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;