我想确定索引的大小,它们是主键索引。这恰好发生在mysql集群上,但我认为这不重要。
答案 0 :(得分:88)
我认为这就是你要找的东西。
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
答案 1 :(得分:37)
扩展Vajk Hermecz的回答。
这就是如何在没有PRIMARY(表本身)的情况下获得所有索引大小(以兆字节为单位),按大小排序。
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 4 DESC;
答案 2 :(得分:31)
如果您使用的是InnoDB表,则可以从mysql.innodb_index_stats
获取各个索引的大小。 '尺寸' stat包含页面中的答案,因此您必须将其乘以页面大小which is 16K by default。
select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';
答案 3 :(得分:4)
在MyISAM
上,每个索引块4 KB
页面填充到fill_factor
,并带有索引记录,每个索引记录长key length + 4
个字节。
Fill factor
通常为2/3
对于InnoDB
,该表始终聚集在PRIMARY KEY
上,没有单独的PRIMARY KEY
索引
答案 4 :(得分:2)
使用phpMyAdmin,在查看表结构时,底部有一个Details链接。单击它后,它将显示您在表中标记为Space Usage的索引的总大小。
我不认为它会单独显示每个索引。
答案 5 :(得分:2)
答案 6 :(得分:1)
以上是对上述某些内容的修改,也为您提供了每个索引所使用的表的总索引的百分比,希望这对某人有用
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'
示例输出
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
此致 利安
答案 7 :(得分:0)
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;