Сравнение движков 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.

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


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о