Ich möchte die Größe meiner Indizes bestimmen, es handelt sich um Primärschlüsselindizes. Dies geschieht zufällig auf einem MySQL-Cluster, aber ich denke nicht, dass dies von Bedeutung ist.
Antworten:
Ich denke, das ist was du suchst.
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Erweiterung der Antwort von Vajk Hermecz.
Auf diese Weise können Sie die gesamte Größe der Indizes in Megabyte ohne das nach Größe geordnete PRIMARY (die Tabelle selbst) ermitteln.
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;?
Wenn Sie InnoDB-Tabellen verwenden, können Sie die Größe für einzelne Indizes abrufen mysql.innodb_index_stats. Der Status 'Größe' enthält die Antwort in Seiten, daher müssen Sie sie mit der Seitengröße multiplizieren, die standardmäßig 16 KB beträgt .
select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';
stat_valuebereits mit der Seitengröße multipliziert, sodass die Spalte die Indexgröße in Byte angibt.
show table status from [dbname]
Hier ist eine Anpassung von einigen der oben genannten, um Ihnen auch den Prozentsatz des Gesamtindex für die Tabelle zu geben, die jeder Index verwendet hat. Hoffentlich ist dies für jemanden nützlich
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'
Beispielausgabe
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
Grüße Liam
Bei Verwendung von phpMyAdmin befindet sich beim Anzeigen der Tabellenstruktur irgendwo unten ein Link zu Details. Sobald Sie darauf klicken, wird die Gesamtgröße der Indizes angezeigt, die sich in der Tabelle befinden, in der sie als Speicherplatznutzung gekennzeichnet sind.
Ich denke nicht, dass es Ihnen jeden Index einzeln zeigt.
In diesem Artikel wird festgelegt, wie die Indexgröße berechnet wird. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
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;