MySQLlà Hệ quản trị cơ sở dữ liệu miễn phí được sử dụng phổ biến. Khi tạo 1 bảng trong MySQL sẽ có nhiều kiểuStorage Engineđể bạn lựa chọn. Trong bài viết này, mình sẽ đề cập đến 2 kiểu lưu trữ bảng được sử dụng nhiều nhất làInnoDBvàMyISAM. Nhưng ta nên dùngInnoDBhayMyISAM? Tại sao như thế? Bài viết này sẽ giúp các bạn nắm được cách hoạt động của cácStorage Enginenày. Từ đó có thể biết được cách chọn loại phù hợp khi xây dựng ứng dụng của mình để hiệu suất và độ ổn định đạt được cao nhất.
1. MyISAM
Đây là mộtStorage Enginemặc định và được sử dụng phổ biến nhất.– Ưu điểmEngine duy nhất hỗ trợFull Text Searchlập chỉ mục toàn văn, cung cấp thuật toán tìm kiếm khá giống Google. Kiến trúc đơn giản nên có tốc độ truy suất (đọc và tìm kiếm) nhanh nhất trong các loại Storage Engine.– Nhược điểmMyISAMhoạt động theo cơ chếTable Level Locking, nên khi có hành động thực hiện (thêm/sửa/xóa) 1 bản ghi nào đó trong table thì table đó sẽ bị khóa lại, chờ tới khi hành động này được thực hiện xong thì hành động kia mới tiếp tục được thực hiện. Kiến trúc đơn giản, không ràng buộc nên loạiStorage Enginenày rất dễ bị crash, hỏng chỉ mục với những table có số lượng bản ghi lớn.– Chuyển đổi 1 table sang MyISAM
ALTER TABLE table_name ENGINE = MyISAM;
2. InnoDB
Đây làStorage Enginemới hơn có nhiều tính năng và ưu điểm vượt trội hơn so vớiMyISAM.– Ưu điểmEngine này kiểm tra tính toàn vẹn và ràng buộc dữ liệu rất cao, khó xảy ra tình trạng hỏng chỉ mục và crash table. Hoạt động theo cơ chếRow Level Locking, vì vậy trong lúc thực hiện các hành động (thêm/sửa/xóa) trên 1 bản ghi, thì các hoạt động ở bản ghi khác trên table vẫn diễn ra bình thường. Hỗ trợTransactiongiúp đảm bảo an toàn khi thực hiện một khối lệnh SQL đảm bảo nhất quán dữ liệu.– Nhược điểmHoạt động cần nhiều RAM hơn, nhưng nếu so sánh vớiMyISAMtrong trường hợp tần suất Insert/Update/Delete lớn thì có khi sẽ lớn hơn vì cơ chếTable Level Lockingsẽ gây ra hàng đợi lớn, gây chậm quá trình xử lý.– Chuyển đổi một table sang InnoDB
ALTER TABLE table_name ENGINE = InnoDB;
Note:Để chuyển đổiStorage EnginetừMyISAMsangInnoDB, nếu trên field nào đánh chỉ mụcFull Text Searchthì các bạn cần phải xóa Index này đi mới có thể chuyển sang được.
3. So sánh MyISAM và InnoDB
MyISAM | InnoDB |
---|---|
Hỗ trợ Table – Level Loking | Hỗ trợ Row – Level Locking |
Được thiết kế cho nhu cầu về tốc độ (speed) | Được thiết kế để đạt hiệu suất tối đa khi xử lý lượng dữ liệu lớn |
Không hỗ trợ Foreign keys vì thế nên chúng ta gọi MySQL với MyISAM là DBMS | Hỗ trợ Foreign keys vì thế nên chúng ta gọi MySQL với InnoDB là RDBMS |
Lưu trữ tables, data, indexes của nó trong không gian đĩabằng cách sử dụng 3 file riêng biệt (table_name.FRM, table_name.MYD, table_name.MYI) | Lưu trữ tables, indexes của nó trong 1 không gian bảng |
Không hỗ trợ Transaction | Có hỗ trợ Transaction |
Hỗ trợ Full Text Search | Từ version 5.5 trở về sau, InnoDB có hỗ trợ Full Text Search |
=>Tóm lại:
- Với 1 ứng dụng dạng Blog, News, … thì nên dùngMyISAMđể cho hiệu suất tốt.
- Với ứng dụng dạng Forum, Socials network thì nên sử dụngInnoDBđể tốc độ Insert/Update dữ liệu cao nhất. Bài viết đã giới thiệu về 2 loạiStorage Enginetrong MySQL, tùy vào ứng dụng mà bạn có thể chọnInnoDBhayMyISAMcho phù hợp.