MySQL - MyISAM vs InnoDB

MySQL มี table storage engines อยู่ด้วยกันหลากหลาย แต่ที่นิยมใช้งานกันหลักๆ คือ InnoDB และ MyISAM ในบทความนี้ผมจะมาเปรียบเทียบข้อแตกต่างระหว่าง InnoDB และ MyISAM ในส่วนของ feature, ประสิทธิภาพการทำงาน และข้อดีข้อเสียต่างๆของ InnoDB และ MyISAM

เปรียบเทียบ Feature และ ประสิทธิภาพการทำงานระหว่าง InnoDB และ MyISAM

  • InnoDB เป็นเทคโนโลยีที่ใหม่กว่า MyISAM
  • InnoDB มีการทำงานที่สลับซับซ้อนมากกว่า MyISAM
  • InnoDB ให้ความสำคัญกับ data integrity แต่ MyISAM ไม่ให้ความสำคัญ
  • InnoDB ทำงานแบบ row-level lock สำหรับการ insert and update แต่ MyISAM ทำงานแบบ table-level lock
  • InnoDB เป็น transactions base แต่ MyISAM ไม่ใช่
  • InnoDB มี foreign keys แต่ MyISAM ไม่มี
  • InnoDB สามารถ recovery ข้อมูลกลับมาได้ดีกว่า MyISAM ในกรณีที่เกิด system crash
  • MyISAM รองรับ full-text index แต่ InnoDB ไม่รองรับ

เปรียบเทียบข้อดีและข้อเสียของ MyISAM และ InnoDB

ข้อดี ข้อเสีย InnoDB

ข้อดีของ InnoDB

  • InnoDB ให้ความสำคัญกับ data integrity มากเพราะ InnoDB รองรับการทำงานแบบ relationship constraints และ transactions
  • มีความเร็วในการ insert และ update ด้วยเนื่องจากทำงานในระดับ row level จึงไม่ทำให้ลดปัญหาเรื่องการรอ insert และ update

ข้อเสียของ InnoDB

  • มีความซับซ้อนในการออกแบบ data model มากกว่า MyISAM
  • ต้องการทรัพยากรของระบบมากกว่า MyISAM ดังนั้นบางคำแนะนำให้ปิด InnoDB หากไม่มีการใช้งาน
  • ไม่รองรับการทำ full-text index

ข้อดี ข้อเสีย MyISAM

ข้อดีของ MyISAM

  • ออกแบบ data model ง่าย และไม่ต้องกังวลเรื่องความสัมพันธ์ระหว่าง table
  • ถ้าหาก data model ไม่มีความซับซ้อนจะทำงานเร็วกว่า InnoDB มาก
  • รองรับการทำ full-text index
  • เหมาะกับการอ่านข้อมูล (select) มากกว่าเขียน

ข้อเสียของ MyISAM

  • ไม่มีการตรวจสอบ data integrity
  • ไม่รองรับ transactions
  • ทำงานช้ากว่า InnoDB มากหากระบบเน้นการ insert หรือ update ข้อมูล