2012-10-19 17 views
26

Tôi đang viết một ứng dụng web cho các nghiên cứu của tôi bao gồm tìm kiếm toàn văn và các khóa ngoại.Tại sao công cụ MyISAM của MySQL không hỗ trợ khóa ngoại?

Tôi đã đọc ở đâu đó, công cụ MyISAM thích hợp cho tìm kiếm toàn văn và InnoDB cho khóa ngoài.

Trong trường hợp này, tôi nên sử dụng công cụ nào để có hiệu suất tốt nhất?

  • Tại sao MyISAM không hỗ trợ quan hệ khóa ngoại nhưng InnoDB có?
  • Tại sao MyISAM hỗ trợ tìm kiếm văn bản đầy đủ nhưng InnoDB thì không?
+1

vị trí 'ở đâu đó'? tôi tin rằng nó được giải thích trong đó 'một nơi nào đó 'quá – ajreal

+5

Tính năng không tồn tại theo mặc định. Ai đó cần triển khai chúng. –

+0

@ajreal Tôi đã đọc từ cuốn sách đại học của tôi. Cuốn sách đó giải thích về lợi thế và bất lợi của động cơ. – Firefox101

Trả lời

38
  1. Vui lòng cho tôi biết, Trong trường hợp này những gì cơ tôi phải sử dụng cho cải thiện hiệu suất?

    Hiệu suất của từng công cụ lưu trữ sẽ phụ thuộc vào các truy vấn bạn thực hiện. Tuy nhiên, lưu ý rằng các bảng khác nhau trong cùng một cơ sở dữ liệu có thể sử dụng các công cụ lưu trữ khác nhau.

  2. Tại sao động cơ MyISAM không hỗ trợ quan hệ khóa ngoại và InnoDB?

    Như ghi nhận dưới Foreign Key Differences:

    Ở giai đoạn sau, ràng buộc khoá ngoại sẽ được thực hiện cho MyISAM bảng là tốt.

    Do đó, các ràng buộc chính ngoài nước chưa được thực hiện đơn giản trong MyISAM.

EDIT: Theo bình luận rằng được lấy ra từ tài liệu, dường như nó không còn lên kế hoạch để thực hiện ràng buộc khoá ngoại trong MyISAM động cơ.

  1. Tại sao động cơ MyISAM không hỗ trợ tìm kiếm văn bản đầy đủ và InnoDB không?

    Như ghi nhận dưới What Is New in MySQL 5.6:

    Bạn có thể tạo FULLTEXT chỉ số về InnoDB bảng, và truy vấn chúng bằng cách sử dụng cú pháp MATCH() ... AGAINST.

    Do đó, tìm kiếm văn bản đầy đủ đã được triển khai trong InnoDB từ MySQL 5.6.

+3

Tôi không thấy báo giá "Ở giai đoạn sau, các ràng buộc chính của nước ngoài cũng sẽ được thực hiện cho các bảng MyISAM". trong tài liệu MySQL. Có lẽ tính năng đó chưa được vạch ra? – shabbychef

+0

@shabbychef: Bạn nói đúng — có vẻ như nhận xét đã bị xóa một thời gian giữa [ngày 10 tháng 9 năm 2013] (http://web.archive.org/web/20130910041553/http://dev.mysql.com/doc /refman/5.6/en/ansi-diff-foreign-keys.html) và [ngày 11 tháng 10 năm 2013] (http://web.archive.org/web/20131011141007/http://dev.mysql.com/doc /refman/5.6/en/ansi-diff-foreign-keys.html); Tôi không thể thấy bất kỳ tài liệu tham khảo nào trong tài liệu hiện tại để chỉ ra rằng các ràng buộc FK vẫn được dành cho MyISAM trong tương lai, cũng như tôi không thấy bất kỳ tài liệu/thảo luận/hồ sơ cụ thể nào cho thay đổi này. Vì vậy, có, tôi đoán nó không còn được lên kế hoạch nữa. – eggyal

0

Tôi nhớ thời điểm mysql chỉ có myisam và innodedb đang được phát triển. MyIsam không có khóa ngoại vì nó là hệ thống cũ không hỗ trợ quan hệ trong cơ sở dữ liệu. Nó sẽ không bao giờ sử dụng các phím nước ngoài! Để sử dụng nó, bạn có innodb.Nếu bạn không cần tất cả mọi thứ, như quan hệ trong DB, hãy sử dụng MyISAM để có hiệu suất tốt hơn.