Wydaje mi się, że największą gotcha byłby w transakcjach. Będziesz chciał wiedzieć, czy biblioteki MySQL są domyślnie używane przez aplikacje auto_commit, czy nie.
Na przykład Python nie dokonuje automatycznego zatwierdzania. Oznacza to, że jeśli aplikacja wstawiała wiersz tuż przed zamknięciem swojego połączenia, wstawka zostanie teraz wycofana po przejściu na innodb. Na przykład skrypt Pythona musiałby koniecznie wywołać connection.commit ();
Kolejna różnica może dotyczyć wstawek wielorzędowych lub aktualizacji. Rozważ jedno wstawienie wielorzędowe
insert into tbl values (...row1...), (...row2...), (...rowN....);
Zastanów się, co się stanie, jeśli wystąpi jakiś błąd, taki jak unikalna kolizja kluczy w wierszu 3. W MyISAM pierwsze dwa wiersze zostałyby zapisane, w innodb wszystkie zapisane wiersze zostałyby wycofane, nie pozostawiając niczego zapisanego nawet przy takim błędzie.
Z innodb wejdziesz do świata impasu. Nie są one z natury złe, chyba że występują z taką częstotliwością, aby uniemożliwić wykonanie jakiejkolwiek pracy. Jednak aplikacje będą musiały zostać zakodowane w taki sposób, aby przewidywały zakleszczenia i odpowiednio je obsługiwały (co najprawdopodobniej oznacza po prostu ponów próbę).
Rozważ ograniczenia pamięci / pamięci. Innodb wymaga znacznie więcej zasobów niż MyISAM. Jeśli masz wystarczającą ilość pamięci RAM, aby pule buforów były wystarczająco duże, aby pomieścić wszystkie stoły, to jesteś złoty.
Poszukaj tabel, które mają duże klucze podstawowe. Indeksowanie klastrowe Innodb oznacza, że każdy indeks wtórny zawiera inną kopię PK odpowiedniego wiersza. Jeśli masz 2 indeksy wtórne, oznacza to, że każdy wiersz PK jest zapisywany 3 razy (PK + każdy indeks). Jeśli pk rozciąga się na kilka typów kolumn i dużych typów danych (na przykład char (N)), możesz zobaczyć, jak wymagania indeksu mogą szybko eksplodować pod innodb.