ประโยชน์ของการเรียกใช้ OPTIMIZE TABLE Query ใน MySQL DB Server


9

ฉันอยากจะรู้ว่าอะไรคือประโยชน์ [การปฏิบัติจริง ๆ ] ที่สามารถอ่านได้อีกครั้งโดยการเรียกใช้OPTIMIZE TABLE tbl_nameแบบสอบถามใน MySQL Server

ฉันตรวจสอบสิ่งนี้ครั้งเดียวและพบว่าหลังจากที่เรียกใช้แล้วการเข้าใช้ฐานข้อมูลครั้งต่อไปอาจใช้เวลานานอาจเนื่องมาจากการย้ายชิ้นส่วนหรือมากกว่านั้น แต่การเข้าชมครั้งต่อมาแสดงประสิทธิภาพเป็นอย่างมากฉันไม่แน่ใจว่า ด้วยการเพิ่มประสิทธิภาพหรือการเพิ่มประสิทธิภาพเพียงอย่างเดียวทำเคล็ดลับนี้

ผู้ใดสามารถชี้แนะฉันด้วยค่าความแตกต่างของประสิทธิภาพที่แท้จริงถ้าเป็นไปได้เพื่อที่ฉันจะได้สามารถทำงานต่อไปได้มากขึ้นเมื่อทำงานกับ MySQL กำลังได้รับแรงโน้มถ่วงในโครงการของเรา

คำตอบ:


7

โปรดจำไว้ว่าตาราง 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 จำนวนมาก

การดำเนินการนี้สามารถบรรลุสองสิ่ง

  1. ป้องกัน mysql ไม่ให้มองผ่านแฟรกเมนต์ในตารางเพื่อพยายามโหลดข้อมูลลงในแฟรกเมนต์ที่มีขนาดเหมาะสม การกำจัดชิ้นส่วนเหล่านี้จะลดการดำเนินการนี้

  2. การคำนวณดัชนีดัชนีใหม่ช่วยให้ MySQL Query Optimizer สร้างแผนการอธิบายที่ดีขึ้น มิฉะนั้นคิวรีอาจลดลงในเวลาดำเนินการเพราะ MySQL Query Optimizer ตัดสินใจเดาผิด ๆ ในแผนอธิบาย นี่จะเป็นอาการที่แน่นอนของตารางที่มี UPDATE และ DELETE ในปริมาณมาก

ข้อแม้

ในเรื่องเกี่ยวกับการแคชการแคชนั้นจะทำการดำน้ำอย่างรวดเร็วเนื่องจากการสแกนแบบเต็มตาราง สำหรับหน้าดัชนี MyISAM จะไหลเข้าและออกจาก MyISAM Key Cache สำหรับ InnoDB หน้าข้อมูลและหน้าดัชนีจะไหลเข้าและออกจาก InnoDB Buffer Pool


ขอบคุณสำหรับการตอบกลับของคุณ. จากมุมมองของคุณฉันเข้าใจว่าฉันควรใช้บริการบางอย่างเช่นงาน cron เพื่อกำหนดตารางการปรับให้เหมาะสมสำหรับตารางที่อัปเดตบ่อยครั้งของฉันเพื่อที่ฉันจะได้รับประสิทธิภาพที่ดีขึ้น นอกจากนี้ฉันใช้ InnoDB สำหรับตารางนี้ นี่เป็นตัวเลือกที่ดีกว่า นอกจากนี้ฉันพบว่าการรวมแฮชใน SQL Server ซึ่งถูกเสนอให้ปรับปรุงประสิทธิภาพการค้นหาคุณสามารถอธิบายสิ่งนี้ให้ฉันได้บ้างและจะให้คล้ายกับสิ่งนี้ใน MySQL ได้อย่างไร โปรดให้ฉันเพิ่มประสิทธิภาพของ SQL Query สำหรับ MySQL [รุ่น Windows7]
Saravanan

@savaranan: เครื่องมือเพิ่มประสิทธิภาพการสืบค้น MySQL ที่ฉันอ้างถึงคือเครื่องมือภายในที่สร้างขึ้นใน MySQL BTW เนื่องจากตารางที่คุณต้องการปรับให้เหมาะสมคือ InnoDB คุณสามารถข้ามขั้นตอนปิดใช้งานคีย์และเปิดใช้งานคีย์ได้ นอกจากนี้ ANALYZE TABLE สามารถข้ามได้เนื่องจากไม่มีประโยชน์โดยสิ้นเชิงบนตาราง InnoDB เนื่องจาก InnoDB คำนวณซ้ำความสำคัญของตารางโดยประมาณอย่างใกล้ชิดโดยใช้หน้าจากดัชนี BTREE ซึ่งรู้จักกันในชื่อดัชนีการดำน้ำ
RolandoMySQLDBA

@savaranan: เท่าที่ดัชนี HASH ดำเนินไป InnoDB มีดัชนีแฮชที่ปรับเปลี่ยนได้ ( dev.mysql.com/doc/refman/5.5/th/innodb-adaptive-hash.html ) นอกจากนี้ยังมีคำแนะนำที่ดีเกี่ยวกับการเลียนแบบดัชนีแฮชของคุณและการจัดการการชนตามหน้า 103-106 ของ "High Performance MySQL" ( amazon.com/dp/0596101716 )
RolandoMySQLDBA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.