created: 2021-01-13T03:52:47.000Z
MySQLでテーブルごとのデータ容量とインデックスの容量を一蘭する
こんなクエリで出せる
SELECT table_name,
(data_length + index_length) / 1000000 mb,
data_length / 1000000 data_mb, -- 実データの容量
index_length / 1000000 idx_mb -- インデックスデータの容量
FROM information_schema.tables -- 後述
WHERE table_schema = database() -- ユーザー定義のテーブルに絞る
ORDER BY data_length DESC;
データベース内の合計だとこんな感じ
SELECT table_name,
SUM(data_length + index_length) / 1000000 mb,
SUM(data_length) / 1000000 data_mb,
SUM(index_length) / 1000000 idx_mb
FROM information_schema.tables -- 後述
WHERE table_schema = database() -- ユーザー定義のテーブルに絞る
information_schema.tables
この他にも AVG_ROW_LENGTH
とかパッと見れるとよさそうなカラムがある
+-----------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| TABLE_TYPE | varchar(64) | NO | | | |
| ENGINE | varchar(64) | YES | | <null> | |
| VERSION | bigint(21) unsigned | YES | | <null> | |
| ROW_FORMAT | varchar(10) | YES | | <null> | |
| TABLE_ROWS | bigint(21) unsigned | YES | | <null> | |
| AVG_ROW_LENGTH | bigint(21) unsigned | YES | | <null> | |
| DATA_LENGTH | bigint(21) unsigned | YES | | <null> | |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES | | <null> | |
| INDEX_LENGTH | bigint(21) unsigned | YES | | <null> | |
| DATA_FREE | bigint(21) unsigned | YES | | <null> | |
| AUTO_INCREMENT | bigint(21) unsigned | YES | | <null> | |
| CREATE_TIME | datetime | YES | | <null> | |
| UPDATE_TIME | datetime | YES | | <null> | |
| CHECK_TIME | datetime | YES | | <null> | |
| TABLE_COLLATION | varchar(32) | YES | | <null> | |
| CHECKSUM | bigint(21) unsigned | YES | | <null> | |
| CREATE_OPTIONS | varchar(255) | YES | | <null> | |
| TABLE_COMMENT | varchar(2048) | NO | | | |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set
Time: 0.026s