Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีรายการตาราง MySQL พร้อมขนาด เรียงตามขนาด

การใช้ 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
ENGINEStorage Engine-
CREATE_TIMEเวลาสร้างDatetime
UPDATE_TIMEเวลาอัปเดตล่าสุดDatetime

ตัวอย่างผลลัพธ์ (ย่อจาก Database test)

TABLE_NAMEROWSDATA (MB)INDEX (MB)TOTAL (MB)
empinfoview00.000.000.00
lookuptable00.000.000.00
view_student00.000.000.00
addingcurrencysymboldemo40.020.000.02
student20.020.030.05
constraintdemo00.020.020.03
insertignoredemo20.020.020.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