ไดเรกทอรีบทความ
กลไกการจัดเก็บข้อมูลของตารางฐานข้อมูลเปรียบเสมือนเครื่องยนต์ของรถยนต์ การเปลี่ยนเครื่องยนต์ย่อมส่งผลต่อประสิทธิภาพและลักษณะการทำงานทันที หลายคนคิดว่าฐานข้อมูลมีไว้แค่เก็บข้อมูล แต่เมื่อคุณเริ่มลงมือใช้งานจริง... InnoDB 转成 มายไอซัมเมื่อนั้นคุณจึงจะค้นพบความลับที่ซ่อนอยู่เบื้องหลังมันได้
ทำไมคนถึงอยากเปลี่ยนจาก InnoDB ไปใช้ MyISAM?
ในหลายสถานการณ์ MyISAM จะเร็วกว่า โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันที่เน้นการอ่านและการเขียนข้อมูลน้อย เช่น ฐานข้อมูลบันทึกและสถิติ
กลไกการล็อกระดับตารางของระบบนี้ทำงานได้อย่างราบรื่นมากภายใต้สภาวะการใช้งานพร้อมกันในระดับต่ำ
นอกจากนี้ ระบบจัดเก็บไฟล์ของ MyISAM ยังใช้งานง่ายกว่า; หนึ่ง .MYD จัดเก็บข้อมูลหนึ่งรายการ .MYI การจัดเก็บดัชนี การย้ายข้อมูล และการสำรองข้อมูล ล้วนสะดวกสบายมาก
อย่างไรก็ตาม การรองรับธุรกรรมและคีย์ต่างประเทศของ InnoDB ถือเป็นสิ่งจำเป็นอย่างยิ่งในสถานการณ์ทางธุรกิจที่ซับซ้อน
ดังนั้น คุณต้องพิจารณาว่าธุรกิจของคุณต้องการคุณสมบัติเหล่านี้จริงหรือไม่ ก่อนที่จะทำการเปลี่ยนแปลง
คำสั่งหลัก: ALTER TABLE
ในการแปลงตารางเดียวจาก InnoDB ไปยัง MyISAM คุณต้องการเพียงโค้ดบรรทัดเดียวเท่านั้น:
ALTER TABLE `你的表名` ENGINE = MyISAM;
หลังจากดำเนินการเสร็จสิ้น ระบบจะเปลี่ยนไปใช้เอนจินจัดเก็บข้อมูลอื่น
มันก็ตรงไปตรงมาไม่ใช่เหรอ?
การแปลงแบบกลุ่ม: การสร้างสคริปต์อัตโนมัติ
หากคุณมีตารางหลายสิบหรือหลายร้อยตาราง การแก้ไขตารางเหล่านั้นด้วยตนเองย่อมไม่สะดวกอย่างแน่นอน
ณ จุดนี้ สามารถใช้คำสั่งค้นหาเพียงคำสั่งเดียวเพื่อสร้างคำสั่งแปลงข้อมูลแบบกลุ่มโดยอัตโนมัติได้:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
หลังจากรันเสร็จแล้ว จะแสดงผลลัพธ์ออกมามากมาย... ALTER TABLE ... คำแถลง.
คัดลอกคำสั่งเหล่านี้และเรียกใช้ทั้งหมดพร้อมกันเพื่อทำการแปลงข้อมูลแบบกลุ่มให้เสร็จสมบูรณ์ในครั้งเดียว
นี่คือสิ่งที่เรียกว่า "การแปลงข้อมูลเป็นชุดอัตโนมัติ"
การประเมินความเสี่ยงก่อนการแปลงสภาพ

ข้อจำกัดคีย์ต่างประเทศ
InnoDB รองรับคีย์ต่างประเทศ ในขณะที่ MyISAM ไม่รองรับคีย์ต่างประเทศเลย
เมื่อแปลงเสร็จแล้ว ข้อจำกัดคีย์ต่างประเทศจะถูกละทิ้งไปโดยตรง
หากธุรกิจของคุณอาศัยการลบหรืออัปเดตแบบต่อเนื่อง ตรรกะดังกล่าวจะล้มเหลวโดยสิ้นเชิงหลังจากการแปลงข้อมูล
การสนับสนุนธุรกรรม
InnoDB มีระบบธุรกรรมและรองรับการทำธุรกรรม COMMIT และ ROLLBACK.
MyISAM ไม่รองรับธุรกรรม แต่รองรับเฉพาะการล็อกระดับตารางเท่านั้น
หลังจากการแปลงเสร็จสิ้น โค้ดที่เกี่ยวข้องกับการทำธุรกรรมทั้งหมดจะใช้การไม่ได้ และจะไม่สามารถย้อนกลับได้ในกรณีที่เกิดข้อผิดพลาด
ประสิทธิภาพการทำงานพร้อมกัน
InnoDB ใช้การล็อกระดับแถว ในขณะที่ MyISAM ใช้การล็อกระดับตาราง
ในสถานการณ์ที่มีการใช้งานพร้อมกันจำนวนมาก MyISAM มักจะล็อกตาราง ซึ่งนำไปสู่ปัญหาคอขวดด้านประสิทธิภาพ
คุณสมบัติของดัชนี
在 MySQL ก่อนเวอร์ชัน 5.6 MyISAM มีดัชนีข้อความเต็มรูปแบบเป็นของตัวเอง
แต่ใน MySQL การจัดทำดัชนีข้อความเต็มรูปแบบได้รับการสนับสนุนแล้วในเวอร์ชัน 5.6 และ 10 ขึ้นไปของ MariaDB และ InnoDB
ดังนั้น หากคุณไม่ได้ใช้เวอร์ชันเก่ากว่า ก็ไม่จำเป็นต้องเปลี่ยนไปใช้ MyISAM สำหรับการจัดทำดัชนีข้อความเต็มรูปแบบ
กระบวนการปฏิบัติที่ดีที่สุด
สำรองข้อมูล ก่อนทำการแปลง โปรดตรวจสอบให้แน่ใจว่าได้ส่งออกข้อมูลแล้ว
.sqlไฟล์ต่างๆ จะถูกจัดเก็บไว้เพื่อให้สามารถกู้คืนได้ทุกเมื่อโครงสร้างรายการตรวจสอบ ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่ามีคีย์ต่างประเทศอยู่หรือไม่:
SHOW CREATE TABLE `你的表名`;ดำเนินการแปลง 使用
ALTER TABLEอีกทางเลือกหนึ่งคือ สามารถใช้สคริปต์แบบแบตช์เพื่อทำการแปลงให้เสร็จสมบูรณ์ได้ตรวจสอบสถานะสุขภาพ หลังจากการแปลงเสร็จสมบูรณ์แล้ว ให้เรียกใช้คำสั่งต่อไปนี้:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;สิ่งนี้ยืนยันว่าตารางทำงานได้อย่างถูกต้องและปล่อยส่วนต่าง ๆ ออกมา
วิธีการกู้คืนแบบย้อนกลับ
หากพบว่าประสิทธิภาพการทำงานลดลงหรือมีปัญหาเกี่ยวกับตรรกะทางธุรกิจหลังจากการแปลง คุณสามารถเปลี่ยนกลับไปใช้ InnoDB ได้ทุกเมื่อ:
ALTER TABLE `你的表名` ENGINE = InnoDB;
นี่คือสิ่งที่เรียกว่า "การผ่าตัดที่สามารถย้อนกลับได้" ซึ่งทำให้คุณมีทางออก
อ้างอิงมุมมองที่น่าเชื่อถือ
ตามที่ เอกสารทางการของ MySQL คำอธิบาย:
"การสร้างคีย์ต่างประเทศ"aiInnoDB รองรับเฉพาะ nts เท่านั้น หากคุณแปลงตารางเป็น MyISAM คีย์ต่างประเทศทั้งหมดจะถูกละเว้น”
——คู่มืออ้างอิง MySQL บทที่ 14.6.6 ข้อจำกัดคีย์ต่างประเทศ
ข้อความนี้แสดงให้เห็นอย่างชัดเจนว่าคีย์ต่างประเทศนั้นใช้การไม่ได้โดยสิ้นเชิงใน MyISAM
และ เอกสารอย่างเป็นทางการของ MariaDB นอกจากนี้ยังมีการเน้นย้ำว่า:
"MyISAM ไม่รองรับธุรกรรม แอปพลิเคชันที่ต้องการความถูกต้องแม่นยำของธุรกรรมไม่ควรใช้ MyISAM"
——ฐานข้อมูลความรู้ของ MariaDB, เครื่องมือจัดเก็บข้อมูล
นั่นเป็นเหตุผลที่คุณต้องคิดให้ดีก่อนที่จะเปลี่ยนมาใช้ระบบอื่น
มุมมองและข้อสรุปของฉัน
การแปลง InnoDB เป็น MyISAM ก็เหมือนกับการเปลี่ยนเครื่องยนต์ของรถหรูเป็นเครื่องยนต์ของรถบรรทุก
มันสามารถทำงานได้ แต่ทำงานในรูปแบบที่แตกต่างไปจากเดิมอย่างสิ้นเชิง
หากธุรกิจของคุณเกี่ยวข้องกับการสืบค้นข้อมูลทางสถิติที่ไม่ซับซ้อนมากนัก ความเร็วและความเรียบง่ายของ MyISAM อาจเหมาะสมกว่า
อย่างไรก็ตาม หากระบบของคุณพึ่งพาธุรกรรมและคีย์ต่างประเทศ การแปลงระบบเหล่านั้นอย่างไม่รอบคอบก็เหมือนกับการถอดถุงลมนิรภัยออก
ดังนั้น ปัญญาที่แท้จริงจึงไม่ได้อยู่ที่การไล่ตามความเร็วอย่างไม่ลืมหูลืมตา แต่เป็นการสร้างสมดุลระหว่างความมั่นคงและประสิทธิภาพ
การเลือกใช้ฐานข้อมูลเป็นตัวกำหนดหัวใจสำคัญของระบบ
การเชี่ยวชาญในการสลับระบบจัดเก็บพลังงานไม่เพียงแต่เป็นการแสดงให้เห็นถึงความสามารถทางเทคนิคเท่านั้น แต่ยังเป็นการยกระดับความคิดเชิงสถาปัตยกรรมอีกด้วย
หากคุณกำลังพิจารณาการแปลงข้อมูลจำนวนมาก โปรดทำการประเมินความเสี่ยงอย่างครอบคลุมก่อน
เรียกใช้งานสภาพแวดล้อมทดสอบหนึ่งครั้งเพื่อจำลองสถานการณ์ทางธุรกิจจริง
หลังจากตรวจสอบแล้วว่าทุกอย่างถูกต้อง ให้รันคำสั่งในสภาพแวดล้อมการใช้งานจริง
ฐานข้อมูลไม่ใช่ของเล่น แต่เป็นหัวใจสำคัญของข้อมูลในองค์กร
และคุณคือผู้ที่ควบคุมจังหวะการเต้นของหัวใจของคุณเอง
หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ บทความเรื่อง "วิธีการแปลงตาราง InnoDB เป็นตาราง MyISAM ในฐานข้อมูล MySQL/MariaDB แบบเป็นชุด" ที่แชร์ไว้ที่นี่ อาจเป็นประโยชน์สำหรับคุณ
ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-34157.html
