MySQL được thiết kế theo kiến trúc phân lớp rõ ràng, mỗi lớp đảm nhiệm vai trò riêng biệt nhằm tối ưu hiệu năng, độ tin cậy và khả năng mở rộng. Dưới đây là phân tích chi tiết từng thành phần chính.
Lớp kết nối (Connection Layer)
Đây là lớp giao tiếp đầu tiên giữa ứng dụng và máy chủ cơ sở dữ liệu. Nó xử lý việc xác lập kết nối qua socket cục bộ hoặc giao thức mạng như TCP/IP, đồng thời thực hiện xác thực người dùng, kiểm soát quyền truy cập và quản lý luồng kết nối thông qua bộ quản lý luồng (thread pool). Các kết nối an toàn cũng được hỗ trợ thông qua SSL/TLS, và hệ thống sẽ xác minh quyền hạn cụ thể của từng phiên kết nối trước khi cho phép thao tác trên dữ liệu.
Lớp dịch vụ (Service Layer)
Lớp này chịu trách nhiệm xử lý logic nghiệp vụ cấp cao: phân tích cú pháp truy vấn SQL, xây dựng cây phân tích (parse tree), tối ưu hóa kế hoạch thực thi (ví dụ: thứ tự join bảng, lựa chọn chỉ mục phù hợp), và thực hiện các hàm tích hợp. Ngoài ra, nó còn quản lý bộ nhớ đệm truy vấn (query cache — đã bị loại bỏ từ MySQL 8.0), giúp tăng tốc các truy vấn đọc lặp lại nếu kích thước bộ đệm đủ lớn và cấu hình được bật.
Lớp bộ lưu trữ (Storage Engine Layer)
Đây là thành phần cốt lõi quyết định cách dữ liệu được lưu trữ, truy xuất và duy trì tính toàn vẹn. MySQL sử dụng kiến trúc plug-in, cho phép thay đổi bộ lưu trữ theo từng bảng mà không ảnh hưởng đến phần còn lại của hệ thống. Chỉ mục (index) được triển khai hoàn toàn ở tầng này, do đó cấu trúc chỉ mục (B+Tree, Hash, R-Tree...) phụ thuộc vào bộ lưu trữ được chọn.
Lớp lưu trữ vật lý (Physical Storage Layer)
Dữ liệu và siêu dữ liệu được lưu dưới dạng tập tin trên hệ thống tệp. Các thành phần bao gồm: nhật ký redo/undo, tệp dữ liệu (.ibd), tệp chỉ mục (.MYI), tệp dữ liệu bảng (.MYD), nhật ký nhị phân (binlog), nhật ký lỗi, nhật ký truy vấn chậm… Tất cả đều được quản lý bởi bộ lưu trữ tương ứng và tương tác với hệ điều hành thông qua API chuẩn.
Khai báo bộ lưu trữ khi tạo bảng
Mỗi bảng trong MySQL có thể được gán một bộ lưu trữ riêng biệt. Cú pháp khai báo như sau:
CREATE TABLE users (
id BIGINT PRIMARY KEY,
username VARCHAR(50),
created_at DATETIME
) ENGINE = InnoDB COMMENT 'Bảng người dùng';
Liệt kê các bộ lưu trữ khả dụng
Để xem danh sách các bộ lưu trữ được hỗ trợ và trạng thái hoạt động của chúng:
SHOW ENGINES;
Thực hành minh họa
- Xem cấu trúc bảng và bộ lưu trữ mặc định:
SHOW CREATE TABLE orders;
- Tạo bảng sử dụng MyISAM:
CREATE TABLE logs_archive (
log_id INT,
message TEXT,
timestamp DATETIME
) ENGINE = MyISAM;
- Tạo bảng tạm trong bộ nhớ:
CREATE TABLE session_cache (
session_key CHAR(64),
payload JSON,
expires_at TIMESTAMP
) ENGINE = MEMORY;
So sánh đặc trưng nổi bật
InnoDB
- Hỗ trợ giao dịch ACID đầy đủ (Atomicity, Consistency, Isolation, Durability).
- Cơ chế khóa hàng (row-level locking), giảm xung đột trong môi trường đa người dùng.
- Cho phép ràng buộc khóa ngoại (FOREIGN KEY), đảm bảo tính toàn vẹn tham chiếu.
- Mỗi bảng tương ứng với một tệp
.ibdchứa cấu trúc bảng (SDI), dữ liệu và chỉ mục — tùy thuộc vào tham sốinnodb_file_per_table. - Cấu trúc lưu trữ logic gồm: tablespace → segment → extent → page → row, trong đó page (16KB) là đơn vị nhỏ nhất để đọc/ghi từ đĩa.
MyISAM
- Không hỗ trợ giao dịch hay khóa hàng; chỉ hỗ trợ khóa bảng (table-level lock).
- Hiệu suất đọc rất cao, thích hợp cho hệ thống chỉ đọc hoặc ít cập nhật.
- Sử dụng ba tệp riêng biệt:
.sdi(cấu trúc),.MYD(dữ liệu),.MYI(chỉ mục).
MEMORY
- Toàn bộ dữ liệu nằm trong RAM, tốc độ truy vấn cực nhanh nhưng mất dữ liệu khi tắt máy.
- Mặc định sử dụng chỉ mục băm (hash index), phù hợp cho tra cứu bằng khóa chính hoặc giá trị duy nhất.
- Chỉ lưu tệp
.sdivì dữ liệu không được lưu vĩnh viễn trên đĩa. - Giới hạn kích thước bảng do giới hạn bộ nhớ và không hỗ trợ giao dịch.
So sánh trọng tâm
| Tính năng | InnoDB | MyISAM |
|---|---|---|
| Giao dịch | ✅ Hỗ trợ đầy đủ | ❌ Không hỗ trợ |
| Khóa | ✅ Hàng & bảng | ❌ Chỉ khóa bảng |
| Khóa ngoại | ✅ Có | ❌ Không |
Nguyên tắc lựa chọn bộ lưu trữ
- InnoDB: Ưu tiên khi cần đảm bảo tính toàn vẹn dữ liệu, xử lý song song cao và yêu cầu giao dịch nguyên tử (ví dụ: hệ thống thanh toán, quản lý kho).
- MyISAM: Phù hợp với bảng dữ liệu tĩnh hoặc bảng nhật ký chỉ ghi — nơi tốc độ đọc là yếu tố then chốt và không cần tính nhất quán nghiêm ngặt.
- MEMORY: Dùng làm bảng tạm thời, bộ đệm trung gian hoặc bảng tra cứu nhanh với khối lượng dữ liệu vừa phải và chấp nhận mất dữ liệu.