我想确定索引的大小,它们是主键索引。这碰巧是在mysql群集上,但我认为这并不重要。
Answers:
我认为这就是您要寻找的。
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/zh-CN/show-table-status.html
扩展了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 size_in_mb DESC;
ORDER BY size_in_mb DESC;
吗?
如果使用InnoDB表,则可以从获取单个索引的大小mysql.innodb_index_stats
。“ size”统计信息包含以页为单位的答案,因此您必须将其乘以page-size (默认为16K)。
select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';
stat_value
已经将乘以页面大小,因此该列给出了以字节为单位的索引大小。
show table status from [dbname]
这是上述内容的改编,也可以为您提供每个索引使用的表在总索引中所占的百分比,希望这对某人有用
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
问候利亚姆
使用phpMyAdmin,在查看表结构时,在底部某处有一个Details链接。单击它后,它将显示表上标记为“空间使用情况”的索引的总大小。
我认为它不会单独显示每个索引。
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;