資料庫擁有數十上百張表時,逐一 COUNT(*) 統計行數極其低效。MySQL 的 information_schema.TABLES 視圖預先統計各表行數,可秒級定位大表。
USE information_schema;
SELECT table_name, table_rows
FROM tables
WHERE table_schema = 'your_database' -- 指定資料庫,避免跨庫干擾
ORDER BY table_rows DESC
LIMIT 10;
| 欄位 | 含義 |
|---|---|
| TABLE_ROWS | 預估行數(InnoDB 為掃描估算,非精確值) |
| DATA_LENGTH | 資料檔大小(位元組) |
| INDEX_LENGTH | 索引檔大小(位元組) |
| DATA_LENGTH + INDEX_LENGTH | 表總佔用空間 |
| ENGINE | 儲存引擎 |
TABLE_ROWS 為精確值,儲存在表頭。TABLE_ROWS 為掃描估算,誤差可達 40%~50%。SELECT COUNT(*) FROM table_name;(InnoDB 需全表掃描,大表慎用)。SHOW CREATE TABLE tables\G
-- ENGINE=MEMORY
information_schema 下的表為 MEMORY 引擎,啟動時由背景執行緒掃描填充。頻繁寫入的表統計資訊可能過舊,執行 ANALYZE TABLE tbl_name; 可更新統計資訊,改善執行計畫準確度。
DATA_LENGTH + INDEX_LENGTH 評估空間佔用。TABLE_ROWS 趨勢,預警暴增風險。