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'
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;
9条答案
按热度按时间jyztefdp1#
我想这就是你要找的。
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
kyks70gy2#
扩展了Vajk Hermecz的答案。
这就是如何获得所有索引的大小(以MB为单位),而不使用PRIMARY(表本身),并按大小排序。
h7appiyu3#
如果你使用InnoDB表,你可以从
mysql.innodb_index_stats
得到单个索引的大小,'size'统计包含了答案,以页为单位,所以你必须把它乘以页面大小,默认值是16K。ykejflvf4#
下面是对上面一些方法的修改,它还为您提供了每个索引所使用的表的总索引的百分比,希望这对某些人有用
输出示例
问候利亚姆
ecr0jaav5#
在
MyISAM
上,每个索引块是4 KB
页,用索引记录填充到fill_factor
,每个索引块的长度为key length + 4
字节。Fill factor
通常为2/3
对于
InnoDB
,表总是聚集在PRIMARY KEY
上,没有单独的PRIMARY KEY
索引iqih9akk6#
使用phpMyAdmin,当你查看表格结构时,在底部某处有一个Details链接,一旦你点击它,它会显示你在标有Space Usage的表格中所拥有的索引的总大小。
我不认为它会单独显示每个索引。
r8uurelv7#
在本文中确定如何计算索引大小。http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
ghhaqwfi8#
From the MySQL 5.6 reference
tag5nh1u9#
如果只想知道现有索引需要多少空间每行,可以查看EXPLAIN命令的
key_len
输出,其中显示了索引大小(以字节为单位):如果查询将返回至少1行,则这将显示
(column_1, column_2)
上索引的大小。您可以验证在输出的key
列中使用了正确的索引。