Bạn có thể có cả hai bảng MyISAM và InnoDB trong cùng một cơ sở dữ liệu. Những gì bạn sẽ tìm thấy mặc dù, khi có bảng rất lớn là, MyISAM sẽ gây ra vấn đề khóa bàn. Điều này cuối cùng là, nó khóa toàn bộ bảng cho một giao dịch duy nhất, điều này rất tệ nếu bạn có nhiều người dùng sử dụng trang web của mình. Ví dụ: Nếu bạn có người dùng đang tìm kiếm thứ gì đó trên trang web của mình và truy vấn mất vài phút để hoàn thành, không người dùng nào khác có thể sử dụng trang web của bạn trong khoảng thời gian đó vì toàn bộ bảng bị khóa.
Mặt khác, InnoDB sử dụng khóa cấp hàng, nghĩa là hàng đó là hàng duy nhất bị khóa khỏi bảng trong khi giao dịch. InnoDB có thể chậm hơn ở các tìm kiếm vì nó không cung cấp tìm kiếm văn bản đầy đủ như MyISAM, nhưng đó không phải là một vấn đề lớn khi bạn so sánh nó với khóa cấp bảng của MyISAM. Nếu bạn sử dụng InnoDB, giống như nhiều trang web lớn, thì bạn có thể sử dụng công cụ tìm kiếm phía máy chủ như Sphinx để tìm kiếm toàn văn. Hoặc bạn thậm chí có thể sử dụng một bảng MyISAM để thực hiện tìm kiếm như được đề xuất như f00
. Cá nhân tôi đã đề nghị InnoDB chủ yếu là do tính năng khóa cấp hàng, nhưng cũng bởi vì bạn có thể thực hiện tìm kiếm toàn văn bằng nhiều cách khác nhau.
Về cơ bản, nếu bạn có một ứng dụng bảng tin nhắn với nhiều lựa chọn, chèn cũng như cập nhật, InnoDB có lẽ là sự lựa chọn chung thích hợp. Nhưng nếu bạn không xây dựng một cái gì đó như thế (hoặc bất kỳ điều gì khác với người dùng đã đăng ký) và làm việc của bạn chủ yếu với nội dung tĩnh (hoặc nhiều lần đọc hơn viết), thì bạn có thể sử dụng MyISAM.
Nguồn
2011-01-02 05:11:02
chỉ mục khóa chính là gì? http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html Tại sao các chỉ mục khóa chính được nhóm lại tốt hơn các chỉ mục btree bình thường? http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –