SELECT COUNT(*) AS table_count
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_TYPE = 'BASE TABLE';
TABLE_SCHEMA:資料庫名稱(區分大小寫,取決於 lower_case_table_names 設定)。TABLE_TYPE:'BASE TABLE' 為實體表,排除 'VIEW'(視圖)。information_schema.TABLES:MySQL 內建元資料表,所有使用者可查,權限受限於可見資料庫。SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbname';
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, TABLE_ROWS, CREATE_TIME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'dbname'
ORDER BY TABLE_NAME;
SELECT TABLE_SCHEMA AS `database`, COUNT(*) AS table_count
FROM information_schema.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
GROUP BY TABLE_SCHEMA
ORDER BY table_count DESC;
information_schema 查詢在表極多(數萬)時可能較慢,因需掃描目錄/元資料。SHOW TABLE STATUS(但需切換資料庫)。SHOW TABLES vs information_schema| 方法 | 優點 | 缺點 |
|---|---|---|
SHOW TABLES FROM dbname | 簡潔、快速(僅列名)、無需指定 schema | 無法直接 COUNT、無法過濾視圖、難以在應用程式中處理結果集 |
information_schema.TABLES | 標準 SQL、可過濾/排序/統計、可跨庫查詢、程式友善 | 極大量表時稍慢、需完整 schema 名稱 |
使用 information_schema.TABLES 配合 TABLE_SCHEMA 與 TABLE_TYPE='BASE TABLE' 是最標準、可移植、程式友善的取得表數量方法。記得替換 'your_database_name' 為實際資料庫名稱。