2009-04-23 20 views

答えて

65

これはあなたが探しているものだと思います。この記事で

show table status from [dbname] 

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

+3

data_lengthはこのコマンドでバイト単位で報告されますか? –

+2

Avg_row_length、Data_length、Max_data_length、Index_length、Data_freeはすべてバイト単位で報告されます。 –

+10

これは、索引あたりのサイズではなく、* total *索引サイズを与えます(表に複数の索引があると仮定します)。 – Sai

3

私には未使用ですが、おそらくMySQL Index Analyzerが役立ちます。

+1

私はそれをdownvoteしていないが、いくつかの理由のために、それは本当に簡単ですphpMyAdminを持つクラスタ –

4

MyISAMの場合、各インデックスブロックは、ページになり、インデックスレコードはkey length + 4バイトで、fill_factorになります。テーブル構造を見たとき

Fill factorがphpMyAdminのを使用して別個PRIMARY KEYインデックス

2

は存在しない、通常InnoDBとして2/3

は、テーブルは常にPRIMARY KEYにクラスタ化され、詳細にリンクがありますどこかの底。これをクリックすると、スペース使用量とマークされている表の索引の合計サイズが表示されます。

個々のインデックスは個別に表示されるとは思いません。

+0

に主キーのインデックスのサイズを計算するために動作しません。ありがとうございました! – MrFabio

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'; 
+0

すばらしい。まさに私が探していたもの! –

+1

明示するには:このクエリでは、 'stat_value'にすでにページサイズが乗算されているので、列はインデックスサイズをバイト単位で示します。 –

+0

ありがとう、受け入れられた答えよりもはるかに優れています。私のような他のnoobsの注記(database_name、table_name、index_nameは実際のデータベース名とテーブル名に置き換えられません;)ではなく、コマンドをそのまま使用する必要があります。 – middlehut

18

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; 
+0

なぜORDER BY 4? – Alex

+0

@Alexので、サイズである4番目のフィールドで注文します。すなわち、最も大きいテーブルを最初に表示し、最も小さいテーブルを最初に表示する –

関連する問題