โปรดจำไว้ว่าตาราง OPTIMIZEจะไม่ทำการจัดเรียงข้อมูล ภายในตาราง OPTIMIZEดำเนินการหลายอย่าง (การคัดลอกข้อมูลไปยังไฟล์ temp สร้างดัชนีใหม่คำนวณดัชนีสถิติใหม่) ในความเป็นจริงตัวอย่างที่ฉันสามารถทำได้ด้วยตนเองตามที่แสดง
ตัวอย่าง: หากคุณเพิ่มประสิทธิภาพmydb.mytable
คุณป้อนคำสั่งนี้:
OPTIMIZE TABLE mydb.mytable;
โปรดทราบว่า mysql ทำสิ่งต่อไปนี้ภายใต้ประทุน:
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
สิ่งนี้มีประโยชน์มากสำหรับตารางที่มี UPDATE และ DELETE จำนวนมาก
การดำเนินการนี้สามารถบรรลุสองสิ่ง
ป้องกัน mysql ไม่ให้มองผ่านแฟรกเมนต์ในตารางเพื่อพยายามโหลดข้อมูลลงในแฟรกเมนต์ที่มีขนาดเหมาะสม การกำจัดชิ้นส่วนเหล่านี้จะลดการดำเนินการนี้
การคำนวณดัชนีดัชนีใหม่ช่วยให้ MySQL Query Optimizer สร้างแผนการอธิบายที่ดีขึ้น มิฉะนั้นคิวรีอาจลดลงในเวลาดำเนินการเพราะ MySQL Query Optimizer ตัดสินใจเดาผิด ๆ ในแผนอธิบาย นี่จะเป็นอาการที่แน่นอนของตารางที่มี UPDATE และ DELETE ในปริมาณมาก
ข้อแม้
ในเรื่องเกี่ยวกับการแคชการแคชนั้นจะทำการดำน้ำอย่างรวดเร็วเนื่องจากการสแกนแบบเต็มตาราง สำหรับหน้าดัชนี MyISAM จะไหลเข้าและออกจาก MyISAM Key Cache สำหรับ InnoDB หน้าข้อมูลและหน้าดัชนีจะไหลเข้าและออกจาก InnoDB Buffer Pool