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

MySQL: เพิ่มประสิทธิภาพตารางหลังลบข้อมูล (OPTIMIZE TABLE)

การใช้ 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