2011-01-02 9 views
5

Tôi đã đọc các chủ đề khác nhau về cái nào tốt hơn giữa InnoDBMyISAM. Dường như các cuộc tranh luận là để sử dụng hoặc khác. Không thể sử dụng cả hai, tùy thuộc vào bảng?InnoDB hoặc MyISAM - Tại sao không phải cả hai?

Điều gì sẽ là những bất lợi khi thực hiện việc này? Theo như tôi có thể nói, động cơ có thể được đặt trong lệnh CREATE TABLE. Do đó, một số bảng thường được đọc có thể được đặt thành MyISAM, nhưng các bảng cần hỗ trợ giao dịch có thể sử dụng InnoDB.

+1

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 –

Trả lời

13

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.

+4

nếu bạn cần tìm kiếm toàn văn, bạn chỉ cần tạo bảng myisam và sử dụng nó để lập chỉ mục trở lại vào dữ liệu innodb được sắp xếp độc đáo của bạn - đơn giản. –

+0

Vâng, đó cũng là một lựa chọn rất tốt. –

+0

Cảm ơn, câu trả lời tuyệt vời.Đánh giá bằng ứng dụng của tôi, có vẻ như InnoDB là ứng dụng tốt nhất để sử dụng. – Skoder

3

Có thực sự bạn có thể sử dụng cả hai trong cùng một cơ sở dữ liệu, bạn có thể chọn riêng cho từng bảng.

0

Bạn không chọn InnoDB hoặc MyISAM trên cấp cơ sở dữ liệu, mà thay vào đó là ở cấp độ bảng. Vì vậy, trong một cơ sở dữ liệu bạn có thể có một số bảng chạy động cơ InnoDB và một số chạy MyISAM. Như bạn đã chỉ ra, bạn có thể chọn sử dụng InnoDB trên các bảng yêu cầu các giao dịch, vv và MyISAM nơi bạn cần các tính năng khác như tìm kiếm toàn văn.

1

Trong ngắn hạn, InnoDB là tốt nếu bạn đang làm việc trên một cái gì đó mà cần một cơ sở dữ liệu đáng tin cậy có thể xử lý rất nhiều lệnh INSERT và UPDATE.

và, MyISAM là tốt nếu bạn cần một cơ sở dữ liệu mà hầu hết sẽ sử dụng nhiều hướng dẫn đọc (SELECT) thay vì viết (INSERT và UPDATES), xem xét nhược điểm của nó trên bảng khóa.

bạn có thể muốn xem;
Pros and Cons of InnoDB
Pros and Cons of MyISAM