Lưu trữ dữ liệu InnoDB và MyISAM chúng ta nên dùng InnoDB hay MyISAM?

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àInnoDBMyISAM. 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

Hướng dẫn chuyển storage engine MyISAM sang InnoDB và ngược lại

MyISAMInnoDB
Hỗ trợ Table – Level LokingHỗ 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à DBMSHỗ 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ợ TransactionCó hỗ trợ Transaction
Hỗ trợ Full Text SearchTừ 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.
Mục nhập này đã được đăng trong News. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *