Отличия между системами хранения данных MyISAM и InnoDB простым языком.
В данной таблице я попробовал показать разницу между MyISAM и InnoDB на простых примерах:
MyISAM Нет
InnoDB Да
MyISAM Нет
InnoDB Да
MyISAM Блокировка на уровне таблиц
InnoDB Блокировка на уровне строкк
MyISAM Медленнее
InnoDB Быстрее
MyISAM Медленнее
InnoDB Быстрее
MyISAM Быстрее
InnoDB Медленнее, ибо есть оверхед на транзакцию, но это цена надежности
MyISAM Работает быстрее
InnoDB Работает медленнее
MyISAM Не возникают
InnoDB Возможны
MyISAM Да
InnoDB Нет (доступен начиная с версии MySQL 5.6.4)
MyISAM Быстрее
InnoDB Медленнее
MyISAM Да
InnoDB Нет
MyISAM Каждой таблице отдельный файл
InnoDB Данные при настройках по умолчанию хранятся в больших совместно используемых файлах
MyISAM Да
InnoDB Нет
MyISAM Меньше
InnoDB Больше
MyISAM Крашится вся таблица
InnoDB По логам можно все восстановить
MyISAM Лучше
InnoDB Хуже
Выводы:
В данной таблице я попробовал показать разницу между MyISAM и InnoDB на простых примерах:
Транзакционный движек?
Транзакция (Transaction) — блок операторов SQL , который в случае ошибки в одном запросе, возвращается к предыдущему состоянию (Rollback), и только в случае выполнения всех запросов подтверждается (Commit)
MyISAM Нет
InnoDB Да
Поддержка внешних ключей.
Внешние ключи — это способ связать записи в двух таблицах по определенным полям так, что при обновлении поля в родительской автоматически происходит определенное изменение поля в дочерней (дочернюю и родительскую выбираешь при создании ключа; точнее, создаешь ключ в дочерней, который ссылается на родительскую).
MyISAM Нет
InnoDB Да
Блокировка.
Блокировка на уровне строк, т.е. если процессу нужно обновить строку в таблице, то он блокирует только эту строку, позволяя другим обновлять другие строки параллельно
MyISAM Блокировка на уровне таблиц
InnoDB Блокировка на уровне строкк
Одновременные запросы к разным частям таблицы.
MyISAM Медленнее
InnoDB Быстрее
При смешанной нагрузке в таблице (select/update/delete/insert)
MyISAM Медленнее
InnoDB Быстрее
Операция Insert
MyISAM Быстрее
InnoDB Медленнее, ибо есть оверхед на транзакцию, но это цена надежности
Если преобладают операции чтения (SELECT)
MyISAM Работает быстрее
InnoDB Работает медленнее
Deadlock.
Deadlock — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами.
MyISAM Не возникают
InnoDB Возможны
Поддержка полнотекстового поиска
MyISAM Да
InnoDB Нет (доступен начиная с версии MySQL 5.6.4)
Запрос Count(*)
MyISAM Быстрее
InnoDB Медленнее
Поддержка mysqlhotcopy.
Утилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных.
MyISAM Да
InnoDB Нет
Файловое хранение таблиц
MyISAM Каждой таблице отдельный файл
InnoDB Данные при настройках по умолчанию хранятся в больших совместно используемых файлах
Бинарное копировании таблиц?
Табличные файлы можно перемещать между компьютерами разных архитектур и разными операционными системами без всякого преобразования.
MyISAM Да
InnoDB Нет
Размер таблиц в БД
MyISAM Меньше
InnoDB Больше
Поведение в случае сбоя
MyISAM Крашится вся таблица
InnoDB По логам можно все восстановить
В случае хранения «логов» и подобного
MyISAM Лучше
InnoDB Хуже
Выводы:
- Использовать MyISAM лучше в таблицах, которых преобладает один вид доступа: чтение (новостной сайт) или запись (например, логирование) ;
- Использование InnoDB имеет смысл во всех остальных случаях и случаях повышенных требований по сохранности данных.