MySQL5.6 のデータベースごとやテーブルごとに使用しているデータ量を調べる
概要
各データベースやテーブルがそれぞれどれくらいのデータを利用しているか調べるには、
関連するメタデータを保持している information_schema.tables テーブルを使用します。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 21.22 INFORMATION_SCHEMA TABLES テーブル
各データベースごとの使用量
以下の例は、接続しているユーザが参照権限を持つ全てのデータベースのサイズ(データ+インデックス)を表示します。
単位はMB(メガバイト)で小数点第3位を四捨五入しています。
SELECT
table_schema as 'database name'
,round(SUM(data_length+index_length)/1024 /1024,2) as 'size(MB)'
FROM
information_schema.tables
GROUP BY
table_schema
ORDER by
SUM(data_length+index_length) DESC;
特定のデータベースのテーブルごとの使用量
WHERE句のtable_schemaに調査したいデータベース名を指定します。
table_typeは通常テーブル(BASE_TABLE)、ビュー(VIEW)のいずれかを取ります。
下の例では通常テーブルのみ表示しています。
なおTEMPORARY テーブルは対象外です。(information_schema.tablesには含まれない)
avg_row_lengthは1レコードの平均サイズです。
table_rowsはレコード数を意味します。MyISAMの場合は正確ですが、InnoDBの場合は概算です。
(InnoDBで正確に把握したい場合はselect count(*) from tablename;)
公式マニュアルより抜粋
InnoDB テーブルの場合、行カウントは SQL 最適化で使用される単なる概算です。
engineカラムにはInnoDBやMyISAMなどが表示されます。
SELECT
table_name
,round((data_length + index_length) / 1024 / 1024,2) as 'total size(MB)'
,round((data_length) / 1024 / 1024,2) as 'data size(MB)'
,round((index_length) / 1024 / 1024,2) as 'index size(MB)'
,avg_row_length
,table_rows
,engine
FROM
information_schema.tables
WHERE
table_schema = '<DATABASE NAME>'
AND table_type = 'BASE TABLE'
ORDER BY
(data_length + index_length) DESC
;
実行結果例
Author And Source
この問題について(MySQL5.6 のデータベースごとやテーブルごとに使用しているデータ量を調べる), 我々は、より多くの情報をここで見つけました https://qiita.com/s-katsumata/items/0625ab0b149cd1ab4c45著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .