Сравнение движков InnoDB и MyISAM

MySQL поддерживает два самых популярных движка InnoDB и MyISAM, но в чем же их отличия?

Давайте посмотрим более подробно и более понятно.

В таблице ниже я попробовал показать разницу между MyISAM и InnoDB собрав данные с официальных и неофициальных источников вместе:

ОписаниеMyISAMInnoDB
ТранзакцииНетДа
Внешние ключиНетДа
БлокировкиНа уровне таблицНа уровне строк
Одновременные запросы к разным частям таблицыМедленнееБыстрее
При смешанной нагрузке в таблице (SELECT/UPDATE/DELETE/INSERT)МедленнееБыстрее
Операция INSERTБыстрееМедленнее
Если преобладают операции чтения (SELECT)Работает быстрееРаботает медленнее
DeadlockНе возникаютВозможны
Полнотекстовый поискДаНет (Доступен начиная с MySQL 5.6.4)
Запрос вида SELECT count(*)БыстрееМедленнее
Файловое хранение таблицКаждая таблица в отдельном файлеПо умолчанию данные хранятся в больших совместно используемых файлах, но возможно хранение каждой таблицы в отдельном файле
Размер занимаемого места на дискеМеньшеБольше (примерно в 1,5 раза)
Поведение в случае сбояЛомается вся таблицаМожно восстановить по логам транзакций

Более детальное описание терминов:
Транзакция (Transaction) – блок операторов SQL, который в случае ошибки в одном запросе, возвращается к предыдущему состоянию (Rollback), и только в случае выполнения всех запросов подтверждается (Commit);
Внешние ключи – это способ связать записи в двух таблицах по определенным полям так, что при обновлении поля в родительской автоматически происходит определенное изменение поля в дочерней (создается ключ в дочерней таблице, который ссылается на родительскую);
Блокировка на уровне строк — в ситуации когда процессу нужно обновить строку в таблице, то он блокирует только эту строку, позволяя другим обновлять другие строки параллельно;
Deadlock — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами;

Выводы:
1. MyISAM стоит использовать, если нужен полнотекстовый поиск до версии MySQL 5.6.4
2. MyISAM подойдет, когда в таблице очень мало записей и большое количество чтений.
3. Во всех остальных случаях нужно использовать InnoDB.

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.