Một số đặc điểm của InnoDB và MyISAM trong cơ sở dữ liệu MySQL


-InnoDB hỗ trợ relationship (data integrity and foreign key constraints) còn MyISAM thì ko: Đa phần các open source đều không coi trọng việc này nhưng nếu ứng dụng của bạn bắt buộc phải dùng foreign key constraints thì InnoDB là lựa chọn của bạn.


- InnoDB hỗ trợ transactions còn MyISAM thì không: Nếu hệ thống của bạn dùng trong các ứng dụng ngân hàng hoặc phải thực hiện việc giao dịch thì chắc chắn là MyISAM sẽ bị loại.

+ Khi nào cần dùng Transaction ?
Khi ta muốn bảo đảm sự toàn vẹn của dữ liệu (không tạo ra các record mồ côi hoặc chứa thông tin sai lệch).

+ DùngTransaction để làm gì?
Để đảm bảo sự toàn vẹn của dữ liệu.

+ Lợi ích của nó ?
Lợi ích là đảm bảo sự toàn vẹn của dữ liệu.

Ví dụ như trong ngân hàng bạn còn $150, bạn lên internet, vào 2 tragn wweb cùng 1 lúc, mua 2 món hàng cùng lúc, một món trị giá $50 và 1 món trị giá $20.
Vậy, nếu đúng thì tài khoản của bạn phải còn lại $150 - $50-$20 = $80.

Tuy nhiên, thử tưởng tượng như sau:
- Đầu tiên ngân hàng nhận được yêu cầu mua hàng từ trang web 1, nó đọc tài khoản của bạn ra giá trị $150.
- Ngay lúc đó ngân hàng cũng nhận được yêu cầu từ trang web 2, nó đọc tài khoản của bạn, ra giá trị $150.
- Sau đó, vụ mua bán thứ nhất kết thúc, ngân hàng ghi lại vào tải khoản của bạn là $150-$50 = $100
- Lúc này vụ mua bán thứ 2 kết thúc và ngân hàng ghi lại vào tải khoản của bạn $150-$20 = $130
=> vậy là cuối cùng bạn còn $130 (sai) thay vì $80 (đúng).
Do vậy transaction được dùng để tránh những trường hợp tương tự như trên xảy ra.

- InnoDB thiên về row-level locking còn MyISAM thiên về table locking: Tức là khi hệ thống của bạn phải thực hiện nhiều các thao tác insert/update thì InnoDB là tốt hơn, còn nếu hệ thống của bạn thực hiện các thao tác select là chủ yếu thì dùng MyISAM là lựu chọn tốt hơn.

- MyISAM hỗ trợ full-text searches còn InnoDB thì không: Đây rõ ràng là một điểm yếu của InnoDB so với MyISAM, và dĩ nhiên là trong hệ thống có dùng full-text searches thì phải loại InnoDB đầu nước.

- Tốc độ của MyISAM cao hơn InnoDB: Khi hệ thống của bạn đòi hỏi performance cao thì MyISAM là lựa chọn tốt hơn.

- Cuối cùng nếu bạn là người mới làm về MySQL (cũng như DB nói chung) thì bạn nên dùng MyISAM vì rằng nó đơn giản hơn InnoDB.