MySQL 5.5 ออกแล้ว เปลี่ยนมาใช้ InnoDB แทน MyISAM
ที่มา: http://www.blognone.com/news/20607
MySQL 5.5 ออกแล้ว การเปลี่ยนแปลงที่สำคัญที่สุดคือย้ายมาใช้ InnoDB เป็น default storage engine แทน MyISAM เสียที หลังจากเตรียมการเรื่องนี้มานานหลายรุ่น
ผลก็คือ MySQL 5.5 จะได้ฟีเจอร์หลายๆ อย่างจาก InnoDB โดยเฉพาะเรื่องประสิทธิภาพ และความสามารถในการขยายตัว (scalability) เพิ่มเข้ามา ส่วนของใหม่อย่างอื่นก็คือปรับปรุงเรื่อง replication และคำสั่งใหม่อย่าง SIGNAL/RESIGNAL รายละเอียดอ่านกันเองใน What's New in MySQL 5.5
เว็บไซต์ Help Net Security ระบุว่าในการทดสอบบนวินโดวส์ MySQL 5.5 มีประสิทธิภาพดีกว่า 5.1 เรื่อง read/write เฉพาะกรณีที่สูงสุดคือ 1,500% ส่วนบนลินุกซ์สูงสุด 360%
ทำความรู้จักกับ INNODB Engine
ที่มา Modoeye Articles โดย Sheroku�เขียนเมื่อ 2009.08.09
InnoDB Database Engine เป็น Database Engine หนึ่งของ MySQL ที่เป็นที่นิยมเช่นเดียวกับ MyISAM เหตุผลหนึ่งที่ส่วนใหญ่นักเขียนโปรแกรมใช้ MyISAM คือความเร็วของการ Query แต่ InnoDB นั้นแม้ความเร็วจะสู้ไม่ได้แต่ก็ยังเป็นที่นิยมเพราะอะไร เรามาเปรียบเทียบ Engine ทั้ง 2 แบบกันว่าต่างกันอย่างไร
MyISAM | InnoDB | MEMORY | NDB | ||
---|---|---|---|---|---|
Multi-statement transactions, ROLLBACK | - | X | - | X | |
Foreign key constraints | - | X | - | - | |
Locking level | table | row | table | row | |
BTREE indexes | X | X | - | X | |
FULLTEXT indexes | X | - | - | - | |
HASH lookups | - | X | X | X | |
Other in-memory tree-based index | - | - | 4.1.0 | - | |
GIS, RTREE indexes | 4.1.0 | - | - | - | |
Unicode | 4.1.0 | 4.1.2 | - | - | |
Merge (union views) | X | - | - | - | |
Compress read-only storage | X | - | - | - | |
Relative disk use | low | high | - | low | |
Relative memory use | low | high | low | high |
อ้างอิงจาก http://dev.mysql.com/tech-resources/articles/storage-engine/part_3.html
จะเห็นว่า InnoDB มีข้อดีเหนือ MyISAM คือ การรองรับ Transaction, Foreign Key, มี Hash Lookup, และการ Lock ได้ถึงระดับ Row
�แต่ก็มีข้อเสียคือขาดการทำดัชนีแบบ FULLTEXT, GIS และ RTREE, ไม่มีการ Union Views, ไม่มีการบีบอัด และใช้ทรัพยากรมากกว่า
แต่เหตุใด InnoDB ยังคงเป็นที่นิยม?
- การทำ Transaction ซึ่งไม่มีใน Engine อื่นๆ นอกจาก InnoDB และ NDB เท่านั้น
- ทำสามารถ Lock ได้ระดับ Row ทำเขียนและอ่านได้ในเวลาเดียวกัน
- มีการทำ Hashing ดัชนี
นอกจากความสามารถสำคัญเรื่องการทำ Transaction ได้แล้วนั้น สิ่งสำคัญที่มีการเลือกใช้ InnoDB คือ การ Lock ระดับ Row แม้ว่า จะมีการใช้ทรัพยากรที่มากกว่า แต่ด้วยการที่สามารถ Lock ระดับ Row ทำให้สามารถเขียน (Insert/Update/Delete) ในเวลาเดียวกับการอ่าน (Select) ได้ ทำให้เกิดความเร็วไม่ต้องรอการเขียนเสร็จก่อนเช่นใน MyISAM
ส่วนสำคัญอีกอย่างคือ InnoDB ได้แยกการทำดัชนี (index) ออกจากตารางข้อมูลและทำ Hashing ดัชนีไว้ด้วยเทคนิคนี้ทำให้การค้นหาเข้าถึงได้รวดเร็ว
จากการทดสอบความเร็วนั้นการ Query ข้อมูลจากตารางน้อยๆ 2-3 ตาราง MyISAM สามารถทำความเร็วได้ดีกว่า แต่เมื่อมีการทำงานกับหลายตาราง >3 ตารางขึ้นไป โดยเฉพาะเมื่อมีข้อมูลหลายล้าน record ขึ้นไปนั้น InnoDB สามารถทำความเร็วได้ดีกว่า เพราะเทคนิคการทำ Hashing ดัชนีแยกไว้นั่นเอง
MyISAM นั้นเนื่องจากไม่มีการ Lock ระดับ Row จึงไม่เหมาะกับงานที่มีการเขียนข้อมูลพร้อมกับการเรียกใช้บ่อยๆ ถ้ามีการเขียนและการอ่านพร้อมๆ กันควรเลือกใช้ InnoDB ดีกว่า ต่อไปเมื่อมีความจำเป็นต้องใช้งาน MySQL ควรเลือก Database Engine ให้เหมาะสมครับ