2009-04-23 98 views

回答

65

我想這就是你要找的。

show table status from [dbname] 

http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

+3

該命令是否在Bytes中報告了data_length? – 2012-06-05 19:07:27

+2

Avg_row_length,Data_length,Max_data_length,Index_length,Data_free均以字節爲單位進行報告,是。 – 2014-07-23 13:41:16

+10

這給出* total *索引大小,而不是每個索引的大小(假設表有多個索引)。 – Sai 2015-04-08 14:54:34

3

未使用我但可能MySQL Index Analyzer可能會有所幫助。

+1

我沒有downvote,但由於某種原因,它不用於計算集羣 – 2009-04-23 14:22:12

4

MyISAM,每個索引塊是4 KB頁填充到fill_factor與索引記錄,每個key length + 4字節長。

Fill factor通常2/3

至於InnoDB,該表始終在PRIMARY KEY集羣,沒有單獨的PRIMARY KEY索引

2

使用phpMyAdmin,查看錶結構時,有一個詳細在鏈路底部某處。一旦你點擊它,它就會顯示你在表格上標有空間使用情況的索引的總大小。

我不認爲它會單獨顯示您的每個索引。

+0

與phpMyAdmin這是很容易的主鍵索引的大小工作。謝謝! – MrFabio 2016-10-03 16:29:18

20

如果您使用的是InnoDB表格,您可以從mysql.innodb_index_stats獲取各個索引的大小。 「尺寸」統計數據包含頁面中的答案,因此您必須將其乘以頁面尺寸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'; 
18

擴展Vajk Hermecz的回答。
這是如何獲得所有索引大小,以MB爲單位,沒有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;