MySQL 將所有元數據存儲在 information_schema 系統庫中,TABLES 表記錄了每個表的物理存儲統計。通過聚合 DATA_LENGTH(數據大小)和 INDEX_LENGTH(索引大小)即可獲得準確大小。
USE information_schema;
SELECT
CONCAT(ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2), ' MB') AS `Total_Size`
FROM TABLES;
SELECT
CONCAT(ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2), ' MB') AS `DB_Size`
FROM TABLES
WHERE TABLE_SCHEMA = 'home';
SELECT
CONCAT(ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2), ' MB') AS `Table_Size`
FROM TABLES
WHERE TABLE_SCHEMA = 'home' AND TABLE_NAME = 'members';
SELECT
TABLE_SCHEMA AS `Database`,
CONCAT(ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2), ' MB') AS `Size`,
COUNT(*) AS `Table_Count`
FROM TABLES
GROUP BY TABLE_SCHEMA
ORDER BY SUM(DATA_LENGTH + INDEX_LENGTH) DESC;
| 單位 | 除數 | 示例 |
|---|---|---|
| Bytes(字節) | 1 | 原始值 |
| KB | / 1024 | ~1,024 Bytes |
| MB | / 1048576 | ~1,048,576 Bytes |
| GB | / 1073741824 | ~1,073,741,824 Bytes |
DATA_FREE 可查看碎片空間:DATA_LENGTH + INDEX_LENGTH + DATA_FREETABLE_ROWS 估算平均行大小ANALYZE TABLE 更新統計信息,提高查詢準確度