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.
86
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;
quelle
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';
quelle
stat_value
bereits mit der Seitengröße multipliziert, sodass die Spalte die Indexgröße in Byte angibt.show table status from [dbname]
Ein
MyISAM
, jeder Indexblock ist eine4 KB
Seite, diefill_factor
mit Indexdatensätzen gefüllt ist , die jeweilskey length + 4
Bytes lang sind.Fill factor
ist normalerweise2/3
Da
InnoDB
die Tabelle immer auf dem gruppiert istPRIMARY KEY
, gibt es keinen separatenPRIMARY KEY
Indexquelle
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
Grüße Liam
quelle
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.
quelle
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/
quelle
Aus der MySQL 5.6-Referenz
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;
quelle