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

แปลง MyISAM เป็น InnoDB Storage Engine ใน MySQL

ใช้ ALTER TABLE ... ENGINE = InnoDB เพื่อแปลง Storage Engine จาก MyISAM เป็น InnoDB

ขั้นตอน

1. สร้างตาราง MyISAM (ตัวอย่าง)

CREATE TABLE MyISAMToInnoDBDemo (
    id INT,
    Name VARCHAR(100)
) ENGINE = MyISAM;

2. ตรวจสอบ Engine ปัจจุบัน

SELECT TABLE_NAME, ENGINE 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'business' AND ENGINE = 'MyISAM';

-- ผลลัพธ์
+-------------------------+--------+
| TABLE_NAME              | ENGINE |
+-------------------------+--------+
| studentrecordwithmyisam | MyISAM |
+-------------------------+--------+

3. แปลงเป็น InnoDB

ALTER TABLE MyISAMToInnoDBDemo ENGINE = InnoDB;
-- Query OK, 0 rows affected (1.65 sec)

4. ตรวจสอบหลังแปลง

SELECT TABLE_NAME, ENGINE 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'test' AND ENGINE = 'InnoDB'
  AND TABLE_NAME = 'myisamtoinnodbdemo';

-- ผลลัพธ์
+--------------------+--------+
| TABLE_NAME         | ENGINE |
+--------------------+--------+
| myisamtoinnodbdemo | InnoDB |
+--------------------+--------+

วิธีแปลงหลายตารางพร้อมกัน (Script)

-- Generate ALTER Statements
SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` ENGINE=InnoDB;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA IN ('business', 'test') 
  AND ENGINE = 'MyISAM'
  AND TABLE_TYPE = 'BASE TABLE';

⚠️ ข้อควรพิจารณาก่อนแปลง

หัวข้อMyISAMInnoDBImpact
Disk Spaceน้อยกว่ามากกว่า 2-3xต้องมีพื้นที่พอ
COUNT(*)InstantFull ScanQuery ช้าลง (ใช้ Counter Table แทน)
Full-text SearchBuilt-in5.6+ SupportedOK ใน Version ใหม่
Transactionsไม่มีมี (ACID)App ต้อง Handle Commit/Rollback
Foreign Keysไม่มีมีต้องเพิ่ม FK Constraints
LockingTable-levelRow-levelConcurrency ดีขึ้น
Crash RecoveryManual REPAIRAutoConcurrency ดีขึ้น

ขั้นตอน Migration แบบปลอดภัย

  1. Backup Database (mysqldump)
  2. Test บน Staging Environment
  3. Check Application Compatibility (Transaction, Lock Behavior)
  4. Run ALTER TABLE ในช่วง Low Traffic
  5. Monitor Performance หลัง Migration
  6. Rebuild Indexes: ANALYZE TABLE, OPTIMIZE TABLE

MySQL 8.0: Instant DDL

บาง Operation ทำได้แบบ Instant (No Table Rebuild) แต่ ENGINE CHANGE ยังต้อง Rebuild Table เสมอ