Tôi nghĩ rằng Gotcha lớn nhất sẽ là xung quanh innodb là giao dịch. Bạn sẽ muốn biết liệu các thư viện MySQL đang được sử dụng bởi các ứng dụng của bạn auto_commit theo mặc định hay không.
Python , ví dụ, không tự động cam kết. Điều này có nghĩa là nếu một ứng dụng đã chèn một hàng ngay trước khi đóng kết nối thì phần chèn đó sẽ được khôi phục sau khi bạn thay đổi thành innodb. Ví dụ, tập lệnh python sẽ cần phải chắc chắn để gọi Connection.commit ();
Một điểm khác biệt có thể là xung quanh việc chèn hoặc cập nhật nhiều hàng. Hãy xem xét một bộ chèn nhiều hàng
insert into tbl values (...row1...), (...row2...), (...rowN....);
Xem xét những gì xảy ra nếu có một số loại lỗi như va chạm khóa duy nhất trên hàng3. Với MyISAM, hai hàng đầu tiên sẽ được viết, theo innodb, tất cả các hàng được viết sẽ được khôi phục để lại không có gì được viết ngay cả khi có lỗi như vậy.
Với innodb bạn sẽ bước vào thế giới của những bế tắc. Chúng không phải là xấu, trừ khi chúng xảy ra với tần suất như vậy để ngăn chặn bất kỳ công việc nào được thực hiện. Tuy nhiên, các ứng dụng của bạn sẽ cần được mã hóa theo cách chúng dự đoán các bế tắc và xử lý chúng một cách thích hợp (điều này rất có thể có nghĩa là chỉ thử lại).
Xem xét giới hạn bộ nhớ / lưu trữ. Innodb tốn nhiều tài nguyên hơn MyISAM. Nếu bạn có đủ RAM để giữ cho vùng đệm của bạn đủ lớn để chứa tất cả các bảng thì bạn là vàng.
Tìm các bảng có khóa chính lớn. Lập chỉ mục cụm của Innodb có nghĩa là mỗi chỉ mục phụ giữ một bản sao khác của PK của hàng tương ứng. Nếu bạn có 2 chỉ mục phụ có nghĩa là mỗi hàng PK được lưu trữ 3 lần (PK + mỗi chỉ mục). Nếu pk trải dài trên một số cột và kiểu dữ liệu lớn (char (N) chẳng hạn), bạn có thể thấy các yêu cầu chỉ mục có thể nhanh chóng bùng nổ trong innodb.