小智 89
我想这就是你要找的东西.
show table status from [dbname]
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Dan*_*har 44
扩展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;
Run Code Online (Sandbox Code Playgroud)
Vaj*_*ecz 32
如果您使用的是InnoDB表,则可以从中获取各个索引的大小mysql.innodb_index_stats.'size'统计信息包含页面中的答案,因此您必须将其乘以页面大小,默认情况下为16K.
select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';
Run Code Online (Sandbox Code Playgroud)
这是对上述一些内容的改编,还可以为您提供每个索引使用的表的总索引百分比,希望这对某人有用
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'
Run Code Online (Sandbox Code Playgroud)
示例输出
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
Run Code Online (Sandbox Code Playgroud)
问候利亚姆
在上MyISAM,每个索引块的4 KB页面填充fill_factor索引记录,每个索引记录为key length + 4字节长。
Fill factor 通常是 2/3
至于InnoDB表总是聚集在上PRIMARY KEY,没有单独的PRIMARY KEY索引