MySQL поддерживает два самых популярных движка InnoDB и MyISAM, но в чем же их отличия?
Давайте посмотрим более подробно и более понятно.
В таблице ниже я попробовал показать разницу между MyISAM и InnoDB собрав данные с официальных и неофициальных источников вместе:
Описание | MyISAM | InnoDB |
---|---|---|
Транзакции | Нет | Да |
Внешние ключи | Нет | Да |
Блокировки | На уровне таблиц | На уровне строк |
Одновременные запросы к разным частям таблицы | Медленнее | Быстрее |
При смешанной нагрузке в таблице (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.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.