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

MyISAM เทียบกับ InnoDB ใน MySQL


ทั้งคู่เป็น Storage Engine ตารางใน MySQL 8.0.12 ใช้ InnoDB เป็นค่าเริ่มต้น

ดู Engine ของตารางทั้งหมด:

mysql> USE business; mysql> SHOW TABLE STATUS;

ผลลัพธ์แสดง Column: Name, Engine, Version, Row_format, Rows, Avg_row_length, Data_length, Index_length, Auto_increment, Create_time, Collation, ฯลฯ

ตัวอย่าง output แสดง Engine = InnoDB สำหรับทุกตาราง

เปลี่ยน Engine เป็น MyISAM

ใช้ ALTER TABLE ... ENGINE=MyISAM หรือสร้างคำสั่งแบบ Dynamic:

SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' ENGINE=MyISAM;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'sample' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE';

ความแตกต่างสำคัญ (สรุป)

คุณสมบัติInnoDBMyISAM
Transactions (ACID)รองรับไม่รองรับ
Row-level LockingรองรับTable-level locking เท่านั้น
Foreign Keysรองรับไม่รองรับ
Crash Recoveryดี (Redo/Undo logs)เสี่ยงข้อมูลเสีย
Full-text Search (เก่า)รองรับ (5.6+)รองรับ (native)
Performance (Read-heavy)ดีอาจเร็วกว่าเล็กน้อย

แนวทางเลือก: ใช้ InnoDB สำหรับแอปพลิเคชันทั่วไปที่ต้องการ Transactions, FK, Concurrency ใช้ MyISAM เฉพาะกรณี Read-only, Full-text search แบบเก่า, หรือระบบ Embedded ที่เรียบง่าย