SHOW TABLE STATUS 提供表層級詳細狀態:引擎、列數、資料大小、索引大小、碎片、自動遞增值、建立時間、排序規則等。本文說明指令語法、輸出欄位中文解讀、實戰範例。
SHOW TABLE STATUS FROM db_name [LIKE 'pattern']\G
FROM db_name:指定資料庫(省略則為當前)LIKE 'pattern':篩選表名(支援 % _)\G:垂直顯示,適合寬欄位| 欄位 | 中文說明 | 關注重點 |
|---|---|---|
| Name | 表名 | |
| Engine | 儲存引擎 | InnoDB/MyISAM |
| Version | 表定義版本 | |
| Row_format | 列格式 | Dynamic/Compact/Compressed/Redundant |
| Rows | 預估列數 | InnoDB 為估算值 |
| Avg_row_length | 平均列長度 | |
| Data_length | 資料大小 (bytes) | 實際資料佔用 |
| Max_data_length | 最大資料容量 | |
| Index_length | 索引大小 (bytes) | |
| Data_free | 碎片/可回收空間 | 大於 0 考慮 OPTIMIZE TABLE |
| Auto_increment | 下一個自增值 | |
| Create_time | 建立時間 | |
| Update_time | 最後更新時間 | MyISAM 準確,InnoDB 可能為 NULL |
| Check_time | 最後檢查時間 | |
| Collation | 排序規則 | utf8mb4_general_ci 等 |
| Checksum | 檢查和 | |
| Create_options | 建表額外選項 | partitioned, auto_increment=... 等 |
| Comment | 表註釋 |
mysql> SHOW TABLE STATUS FROM mysql\G
*************************** 1. row ***************************
Name: user
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 4
Avg_row_length: 4096
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2024-01-15 10:30:00
Update_time: NULL
Check_time: NULL
Collation: utf8mb4_general_ci
Checksum: NULL
Create_options:
Comment: Users and global privileges
SELECT TABLE_NAME,
ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name'
ORDER BY (DATA_LENGTH+INDEX_LENGTH) DESC
LIMIT 10;
SELECT TABLE_NAME,
ROUND(DATA_FREE/1024/1024, 2) AS free_mb
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND DATA_FREE > 0
ORDER BY DATA_FREE DESC;
SELECT TABLE_NAME, AUTO_INCREMENT,
CASE
WHEN AUTO_INCREMENT > 2000000000 THEN 'WARNING'
ELSE 'OK'
END AS status
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND AUTO_INCREMENT IS NOT NULL;