在日常運維與容量規劃中,快速掌握各表的數據量、索引大小及總佔用空間至關重要。MySQL 的系統庫 information_schema 中的 TABLES 視圖提供了標準化的元數據查詢接口,無需掃描實際數據頁,效率極高。
| 字段名 | 含義 | 單位/說明 |
|---|---|---|
| TABLE_SCHEMA | 數據庫名 | - |
| TABLE_NAME | 表名 | - |
| ENGINE | 存儲引擎 | InnoDB, MyISAM 等 |
| TABLE_ROWS | 預估行數 | InnoDB 為掃描統計估算值,非精確值 |
| DATA_LENGTH | 數據文件大小 | 字節;InnoDB 包含聚簇索引數據 |
| INDEX_LENGTH | 索引文件大小 | 字節;二級索引大小 |
表總佔用空間 = DATA_LENGTH + INDEX_LENGTH
SELECT
TABLE_NAME,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_mb,
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS data_mb,
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS index_mb,
TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db_name'
ORDER BY total_mb DESC;
SELECT
TABLE_NAME,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_mb,
TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME = 'target_table';
SELECT
TABLE_SCHEMA AS db_name,
ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 2) AS total_gb,
SUM(TABLE_ROWS) AS total_rows
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA
ORDER BY total_gb DESC;
+-------------------+------------+------------+
| TABLE_NAME | total_mb | TABLE_ROWS |
+-------------------+------------+------------+
| itlearner_record | 20824.32 | 104917777 |
| hx_record | 108.15 | 753279 |
| enjoy_data | 6.66 | 70113 |
| tmp_day_id | 0.02 | 811 |
+-------------------+------------+------------+
SELECT COUNT(*)(大表慎用)。information_schema 查詢在表極多(數萬張)時可能較慢,可配合 WHERE TABLE_SCHEMA IN (...) 限定範圍。TABLES 中每個分區為一行,需按 TABLE_NAME 分組彙總獲取邏輯表大小。PROCESS 權限或對應庫的 SELECT 權限。善用 information_schema.TABLES,能讓 DBA 和開發人員秒級掌握實例空間分布,為分庫分表、歸檔清理、擴容規劃提供可靠數據支撐。