Nhìn vào danh sách tính năng sẵn có tại http://dev.mysql.com/doc/refman/5.1/en/memory-st Storage-engine.html hai vấn đề có thể xảy ra:
- Không có giao dịch hoặc hỗ trợ FK, có nghĩa là bạn sẽ phải quản lý tính toàn vẹn giao dịch và tính toàn vẹn tham chiếu trong mã của riêng bạn (điều này có thể kém hiệu quả hơn nhiều so với việc để DB làm điều này cho bạn, mặc dù điều đó phụ thuộc rất nhiều vào ứng dụng của bạn mô hình hành vi dự kiến).
- Chỉ khóa mức bảng: đây có thể là một rào cản đáng kể đối với khả năng mở rộng nếu ứng dụng của bạn cần nhiều trình ghi đồng thời vào cùng một tập hợp bảng hoặc trong trường hợp các thao tác đọc của bạn sử dụng khóa để đảm bảo đọc dữ liệu nhất quán - trong trường hợp đó là bảng dựa trên đĩa hỗ trợ độ chi tiết khóa tốt hơn nhiều sẽ hoạt động tốt hơn nhiều nếu đủ nội dung của nó hiện được lưu trong bộ nhớ cache.
Ngoài ra, giả sử bạn có đủ RAM, bảng dựa trên bộ nhớ phải nhanh hơn bảng dựa trên đĩa. Rõ ràng bạn cần phải có yếu tố chụp ảnh nhanh vào đĩa để giải quyết vấn đề xảy ra khi thiết lập máy chủ được đặt lại, điều này có khả năng phủ nhận hoàn toàn lợi ích hiệu suất tổng thể nếu dữ liệu cần được ghi lại thường xuyên (nếu bạn có thể sống với việc mất một ngày dữ liệu trong trường hợp như vậy bạn chỉ có thể sao lưu một lần mỗi ngày, nhưng trong hầu hết các trường hợp sẽ không được chấp nhận).
Một sự thay thế có thể là:
- Sử dụng các bảng dựa trên đĩa, nhưng đảm bảo rằng bạn có quá nhiều RAM để giữ tất cả RAM trong bất kỳ thời điểm nào (và "đủ RAM" có thể nhiều hơn bạn nghĩ khi bạn cần tính đến bất kỳ quy trình nào khác trên máy, HĐH Bộ đệm IO / bộ đệm và vv
- Quét toàn bộ nội dung (tất cả các trang dữ liệu và chỉ mục) của bảng trên mỗi lần khởi động để tải trước nội dung vào bộ nhớ với
SELECT * FROM <table> ORDER BY <pkey fields>
mỗi bảng theo sau SELECT <indexed fields> FROM <table> ORDER BY <index fields>
cho mỗi chỉ mục
Bằng cách này, tất cả dữ liệu của bạn nằm trong RAM, bạn chỉ phải lo lắng về hiệu năng I / O cho các hoạt động ghi. Nếu bộ công việc chung của ứng dụng của bạn nhỏ hơn nhiều so với toàn bộ DB (thường là như vậy - trong hầu hết các ứng dụng, hầu hết người dùng sẽ chỉ nhìn vào dữ liệu gần đây nhất nếu có thời gian), bạn có thể nên chọn nhiều hơn về mức độ bạn quét để tải trước vào bộ nhớ, cho phép phần còn lại được tải từ đĩa theo yêu cầu.