ใน MySQL สามารถใช้ Storage Engine InnoDB และ MyISAM ร่วมกันในฐานข้อมูลเดียวกันได้อย่างสมบูรณ์ นี่เป็น แนวทางที่แนะนำ (Best Practice) เพื่อเลือก Engine ที่เหมาะสมกับลักษณะการใช้งานของแต่ละตาราง
การสร้างตารางด้วย Engine ที่ต่างกัน
1. สร้างฐานข้อมูล
CREATE DATABASE BothInnoDBandMyISAM;
USE BothInnoDBandMyISAM;
2. สร้างตาราง InnoDB (Transaction, Foreign Key, Row Lock)
CREATE TABLE Student (
StudentId INT,
StudentName VARCHAR(20)
) ENGINE = InnoDB;
3. สร้างตาราง MyISAM (Full-text Search, Read-heavy, Table Lock)
CREATE TABLE Employee (
EmployeeId INT,
EmployeeName VARCHAR(30)
) ENGINE = MyISAM;
ตรวจสอบ Engine ของตาราง
ตาราง Student (InnoDB)
SELECT ENGINE FROM information_schema.tables
WHERE table_name = 'Student' AND table_schema = 'BothInnoDBandMyISAM';
ผลลัพธ์: InnoDB
ตาราง Employee (MyISAM)
SELECT ENGINE FROM information_schema.tables
WHERE table_name = 'Employee' AND table_schema = 'BothInnoDBandMyISAM';
ผลลัพธ์: MyISAM
เปรียบเทียบ InnoDB vs MyISAM
| คุณสมบัติ | InnoDB | MyISAM |
|---|---|---|
| Transaction (ACID) | ✅ รองรับ | ❌ ไม่รองรับ |
| Foreign Key | ✅ รองรับ | ❌ ไม่รองรับ |
| Row-level Locking | ✅ รองรับ | ❌ Table-level Lock |
| Full-text Search | ✅ (5.6+) | ✅ (ดั้งเดิม) |
| Crash Recovery | ✅ ดีเยี่ยม | ❌ เสี่ยงเสียหาย |
| Clustered Index | ✅ Primary Key = Clustered | ❌ Heap Table |
| Compression | ✅ (Barracuda) | ✅ (myisampack) |
| Default Engine (5.5+) | ✅ ใช่ | ❌ ไม่ใช่ |
แนวทางเลือก Engine
- InnoDB (Default, แนะนำส่วนใหญ่): OLTP, Transaction, Foreign Key, Concurrent Write, Critical Data
- MyISAM: Read-heavy, Full-text Search (Legacy), Logging/Archive, Read-only Analytics
- Memory: Temporary, Lookup, Cache (ข้อมูลหายเมื่อ Restart)
- Archive: Log, Audit, Write-once Read-rarely (Compressed)
เปลี่ยน Engine ของตารางที่มีอยู่
ALTER TABLE table_name ENGINE = InnoDB;
ALTER TABLE table_name ENGINE = MyISAM;
การเปลี่ยน Engine จะ Rebuild ตาราง (Lock ตารางระหว่างดำเนินการ) ควรทำในช่วง Maintenance Window
สรุป
ใช่ สามารถผสม InnoDB และ MyISAM ใน Database เดียวกันได้ และเป็น Best Practice ที่จะเลือก Engine ต่อตาราง ตาม Workload และความต้องการ Feature