Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ใช้ InnoDB และ MyISAM ร่วมกันในฐานข้อมูลเดียวได้

ใน 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

คุณสมบัติInnoDBMyISAM
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