การใช้ INFORMATION_SCHEMA.TABLES
เพื่อดูรายการตารางพร้อมขนาด เรียงจากเล็กไปใหญ่ ให้สอบถามจาก INFORMATION_SCHEMA.TABLES คำนวณขนาดจาก DATA_LENGTH + INDEX_LENGTH
คำสั่ง SQL สมบูรณ์
SELECT
TABLE_NAME,
TABLE_ROWS,
DATA_LENGTH,
INDEX_LENGTH,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size_MB`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_TYPE = 'BASE TABLE'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) ASC;
คอลัมน์สำคัญ
| คอลัมน์ | ความหมาย | หน่วย |
|---|---|---|
TABLE_NAME | ชื่อตาราง | - |
TABLE_ROWS | จำนวนแถว (ประมาณสำหรับ InnoDB) | Rows |
DATA_LENGTH | ขนาดข้อมูล | Bytes |
INDEX_LENGTH | ขนาดดัชนี | Bytes |
DATA_FREE | พื้นที่ว่าง (Fragmentation) | Bytes |
ENGINE | Storage Engine | - |
CREATE_TIME | เวลาสร้าง | Datetime |
UPDATE_TIME | เวลาอัปเดตล่าสุด | Datetime |
ตัวอย่างผลลัพธ์ (ย่อจาก Database test)
| TABLE_NAME | ROWS | DATA (MB) | INDEX (MB) | TOTAL (MB) |
|---|---|---|---|---|
| empinfoview | 0 | 0.00 | 0.00 | 0.00 |
| lookuptable | 0 | 0.00 | 0.00 | 0.00 |
| view_student | 0 | 0.00 | 0.00 | 0.00 |
| addingcurrencysymboldemo | 4 | 0.02 | 0.00 | 0.02 |
| student | 2 | 0.02 | 0.03 | 0.05 |
| constraintdemo | 0 | 0.02 | 0.02 | 0.03 |
| insertignoredemo | 2 | 0.02 | 0.02 | 0.03 |
หมายเหตุ: ตาราง View (TABLE_TYPE='VIEW') จะมีขนาด 0
คำสั่งขั้นสูง: พร้อมข้อมูลเพิ่มเติม
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
TABLE_ROWS AS `Rows`,
ENGINE,
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS `Data_MB`,
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS `Index_MB`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Total_MB`,
ROUND(DATA_FREE / 1024 / 1024, 2) AS `Free_MB`,
TABLE_COLLATION AS `Collation`,
CREATE_TIME AS `Created`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_TYPE = 'BASE TABLE'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;
คำสั่งสำหรับทุก Database
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size_MB`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_SCHEMA NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys')
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;
ข้อควรระวัง
- ⚠️
TABLE_ROWSของ InnoDB เป็นค่าประมาณ (อาจต่างจาก COUNT(*)) - 💾 ขนาดบน Disk อาจต่างจาก DATA_LENGTH+INDEX_LENGTH (Compression, Fragmentation)
- 🔧 ใช้
ANALYZE TABLEอัปเดตสถิติให้แม่นยำขึ้น - 🗑️
DATA_FREEสูง → พิจารณาOPTIMIZE TABLE