ทำความรู้จักกับ INNODB Engine เขียนเมื่อ 2009.08.09 โดย

InnoDB Database Engine เป็น Database Engine หนึ่งของ MySQL ที่เป็นที่นิยมเช่นเดียวกับ MyISAM เหตุผลหนึ่งที่ส่วนใหญ่นักเขียนโปรแกรมใช้ MyISAM คือความเร็วของการ Query แต่ InnoDB นั้นแม้ความเร็วจะสู้ไม่ได้แต่ก็ยังเป็นที่นิยมเพราะอะไร เรามาเปรียบเทียบ Engine ทั้ง 2 แบบกันว่าต่างกันอย่างไร


MyISAMInnoDBMEMORYNDB
Multi-statement transactions, ROLLBACK-X-X
Foreign key constraints-X--
Locking leveltablerowtablerow
BTREE indexesXX-X
FULLTEXT indexesX---
HASH lookups-XXX
Other in-memory tree-based index--4.1.0-
GIS, RTREE indexes4.1.0---
Unicode4.1.04.1.2--
Merge (union views)X---
Compress read-only storageX---
Relative disk uselowhigh-low
Relative memory uselowhighlowhigh


อ้างอิงจาก 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 ยังคงเป็นที่นิยม?

  1. การทำ Transaction ซึ่งไม่มีใน Engine อื่นๆ นอกจาก InnoDB และ NDB เท่านั้น
  2. ทำสามารถ Lock ได้ระดับ Row ทำเขียนและอ่านได้ในเวลาเดียวกัน
  3. มีการทำ 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 ให้เหมาะสมครับ



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