การใช้ OPTIMIZE TABLE
คำสั่ง OPTIMIZE TABLE จัดเรียงข้อมูลใหม่ รวมพื้นที่ว่าง (Fragmentation) หลัง DELETE/UPDATE มาก
ตัวอย่าง
mysql> create table DemoTable(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100) );
Query OK, 0 rows affected (1.38 sec)
mysql> insert into DemoTable(Name) values('Chris');
mysql> insert into DemoTable(Name) values('Robert');
mysql> insert into DemoTable(Name) values('Bob');
mysql> insert into DemoTable(Name) values('David');
ลบข้อมูลบางส่วน
mysql> delete from DemoTable where Id IN (1,3);
Query OK, 2 rows affected (0.29 sec)
รัน OPTIMIZE TABLE
mysql> optimize table DemoTable;
ผลลัพธ์:
+------------------+----------+----------+-------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+----------+----------+-------------------------------------------------------------------+
| web.DemoTable | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| web.DemoTable | optimize | status | OK |
+------------------+----------+----------+-------------------------------------------------------------------+
คำอธิบายข้อความ
Table does not support optimize, doing recreate + analyze instead- InnoDB ไม่มี OPTIMIZE ตรงๆ ทำALTER TABLE ... ENGINE=InnoDB(Rebuild) แทนstatus: OK- สำเร็จ
เมื่อไหร่ควรใช้ OPTIMIZE TABLE
- หลัง DELETE จำนวนมาก (> 10-20% ของตาราง)
- หลัง UPDATE คอลัมน์ Variable-length (VARCHAR, TEXT, BLOB) มาก
- ตารางที่มี Fragmentation สูง (เช็คได้จาก
SHOW TABLE STATUSคอลัมน์Data_free)
ตัวเลือกอื่น: ALTER TABLE
ALTER TABLE DemoTable ENGINE=InnoDB; -- Rebuild table (เหมือน OPTIMIZE สำหรับ InnoDB)
สรุป
ใช้ OPTIMIZE TABLE หลังลบ/แก้ไขข้อมูลมาก เพื่อ Reclaim พื้นที่และปรับปรุงประสิทธิภาพ สำหรับ InnoDB จะทำ Rebuild Table