Site logo

InnoDB vs MyISAM: So Sánh Và Chọn Storage Engine Phù Hợp

5:00 read

Giới Thiệu

Một câu hỏi tưởng đơn giản nhưng vẫn khiến nhiều người mới bối rối: "Tạo bảng MySQL xong, sao lại phải chọn storage engine?" MySQL là một trong số ít RDBMS có kiến trúc pluggable storage engine — mỗi bảng (không phải cả database) có thể dùng một engine lưu trữ khác nhau, và engine đó quyết định gần như mọi thứ về hành vi của bảng: có hỗ trợ transaction không, khoá ở mức nào, có sống sót qua một lần crash server không.

Bài này tập trung vào hai engine "kinh điển" nhất: InnoDB (mặc định của MySQL từ bản 5.5) và MyISAM (engine mặc định trước đó, vẫn còn tồn tại trong không ít hệ thống legacy). Nếu bạn cần đào sâu kiến trúc InnoDB (buffer pool, MVCC, adaptive hash index, tuning nâng cao), bài InnoDB Storage Engine: Hướng dẫn toàn diện đã viết rất chi tiết — bài này sẽ không lặp lại phần đó, mà tập trung vào MyISAM (engine chưa có bài riêng) và quan trọng nhất: khi nào chọn cái nào, và vì sao.

Storage Engine Là Gì? (Ôn Lại Nhanh)

Storage engine là lớp chịu trách nhiệm thực sự đọc/ghi dữ liệu xuống đĩa — mọi thứ phía trên nó (SQL parser, optimizer, cache câu lệnh) đều dùng chung, bất kể bảng dùng engine nào. Bạn có thể kiểm tra và đổi engine ở mức từng bảng:

-- Xem bảng đang dùng engine gì
SELECT table_name, engine
FROM information_schema.tables
WHERE table_schema = 'shop_db';

-- Chỉ định engine khi tạo bảng
CREATE TABLE orders (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  ...
) ENGINE=InnoDB;

Vì mỗi bảng chọn engine độc lập, một database hoàn toàn có thể có bảng orders dùng InnoDB (cần transaction) và bảng access_log dùng MyISAM (chỉ ghi tuần tự, không cần transaction) — đây là tình huống rất thường gặp trong các hệ thống legacy.

Yêu cầu đăng nhập

Vui lòng đăng nhập để truy cập nội dung này

Additional Resources

Course Guide

Comprehensive PDF guide with examples

GitHub Repository

Example code for all lessons

Discussion

Have a question about this lesson? Post it here and get answers from instructors and peers.