การใช้ INFORMATION_SCHEMA.TABLES
เพื่อดูรายการตารางที่มีข้อมูล (Non-empty tables) ทั้งหมดในทุก Database ให้สอบถามจาก INFORMATION_SCHEMA.TABLES โดยกรองเฉพาะตารางที่มี TABLE_ROWS >= 1
คำสั่ง SQL
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_ROWS >= 1
AND TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_ROWS DESC;
คอลัมน์ที่สำคัญ
| คอลัมน์ | ความหมาย |
TABLE_SCHEMA | ชื่อ Database |
TABLE_NAME | ชื่อตาราง |
TABLE_ROWS | จำนวนแถวประมาณ (Exact สำหรับ MyISAM, ประมาณสำหรับ InnoDB) |
TABLE_TYPE | BASE TABLE (ตารางทั่วไป) หรือ VIEW |
ENGINE | Storage Engine (InnoDB, MyISAM, etc.) |
DATA_LENGTH | ขนาดข้อมูล (Bytes) |
INDEX_LENGTH | ขนาดดัชนี (Bytes) |
ตัวอย่างผลลัพธ์ (ย่อ)
| Database | Table Name | Rows | Type |
| test | student | 4 | BASE TABLE |
| test | employeeinformation | 6 | BASE TABLE |
| test | product | 12 | BASE TABLE |
| mysql | user | 4 | BASE TABLE |
| performance_schema | events_waits_current | 0 | BASE TABLE |
ข้อควรระวัง
- ⚠️
TABLE_ROWS ของ InnoDB เป็นค่าประมาณ (Estimation) อาจไม่แม่นยำ 100%
- 🔍 สำหรับนับแถวที่แน่นอน ใช้
SELECT COUNT(*) FROM table_name
- 📊 ตาราง System (mysql, performance_schema, information_schema, sys) ก็จะแสดงในผลลัพธ์
- 🚫
TABLE_TYPE = 'VIEW' จะมี TABLE_ROWS = 0 เสมอ (Views ไม่เก็บข้อมูล)
คำสั่งแบบสมบูรณ์พร้อมขนาด
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
TABLE_ROWS AS `Rows`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
ENGINE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_ROWS > 0
AND TABLE_TYPE = 'BASE TABLE'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;