Отличия между системами хранения данных MyISAM и InnoDB простым языком.
В данной таблице я попробовал показать разницу между MyISAM и InnoDB на простых примерах:
Описание | MyISAM | InnoDB |
Транзакционный движок?Транзакция (Transaction) — блок операторов SQL , который в случае ошибки в одном запросе, возвращается к предыдущему состоянию (Rollback), и только в случае выполнения всех запросов подтверждается (Commit) | Нет | Да |
Поддержка внешних ключейВнешние ключи — это способ связать записи в двух таблицах по определенным полям так, что при обновлении поля в родительской автоматически происходит определенное изменение поля в дочерней (дочернюю и родительскую выбираешь при создании ключа; точнее, создаешь ключ в дочерней, который ссылается на родительскую). | Нет | Да |
Блокировка.Блокировка на уровне строк, т.е. если процессу нужно обновить строку в таблице, то он блокирует только эту строку, позволяя другим обновлять другие строки параллельно | Блокировка на уровне таблиц | Блокировка на уровне строк |
Одновременные запросы к разным частям таблицы. | Медленнее | Быстрее |
При смешанной нагрузке в таблице (select/update/delete/insert) | Медленнее | Быстрее |
Операция Insert | Быстрее | Медленнее, ибо есть оверхед на транзакцию, но это цена надежности |
Если преобладают операции чтения (SELECT) | Работает быстрее | Работает медленнее |
DeadlockDeadlock — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами. | Не возникают | Возможны. |
Поддержка полнотекстового поиска | Да | Нет (доступен начиная с версии MySQL 5.6.4) |
Запрос Count(*) | Быстрее | Медленнее |
Поддержка mysqlhotcopyУтилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных. | Да | Нет |
Файловое хранение таблиц | Каждой таблице отдельный файл | Данные при настройках по умолчанию хранятся в больших совместно используемых файлах |
Бинарное копировании таблиц?Табличные файлы можно перемещать между компьютерами разных архитектур и разными операционными системами без всякого преобразования. | Да | Нет |
Размер таблиц в БД | Меньше | Больше |
Поведение в случае сбоя | Крашится вся таблица | По логам можно все восстановить |
В случае хранения «логов» и подобного | Лучше | Хуже |
Выводы:
- Использовать MyISAM лучше в таблицах, которых преобладает один вид доступа: чтение (новостной сайт) или запись (например, логирование) ;
- Использование InnoDB имеет смысл во всех остальных случаях и случаях повышенных требований по сохранности данных.
Что можно еще добавить? Что не понятно?
Не хватает кратких итогов от автора 🙂
Петр, спасибо.
Добавил выводы.
Шикарное сравнение, лучшее что находил на эту тему
Спасибо за статью! Приятно читать.
MySQL версия 5.6 К ключевым улучшения можно отнести: поддержка средств полнотекстового поиска, возможность доступа к данным через memcached API, увеличена производительность работы при интенсивной записи данных, а также увеличена масштабируемость при обработке большого числа одновременных запросов.
Четко, ёмко, понятно. Пять баллов!
Спасибо!
Очень доступно написано!
Добавьте в вывод, что MyISAM надо использовать, когда нужен полнотекстовой поиск
Бинарное копирование:
… Базу данных InnoDB можно перенести, просто скопировав все относящиеся к ней файлы … (7.5.7 Перенесение базы данных InnoDB на другой компьютер)
Уведомление: MySQL: отличия между MyISAM и InnoDB — This is nothing more than a notebook
Лаконично и понятно.хорошая работа
По вашим тогам выбрал для себя MyISAM, так как на сайте в основном только запросы вида SELECT. Записи почти нет. Думаю MyISAM будет быстрее.
Ну как бы никто не запрещает в одной БДе использовать и MyISAM и InnoBD… для разных таблиц свои цели…
Уведомление: MySQL: отличия между MyISAM и InnoDB
Привет с 2017!
Спасибо за статью, просто и понятно 🙂
Каротка и понятно
Привет с 2018!
Хорошая статья)
Отличная статья, спасибо!
Из 2019го. Спасибо, помогло детально разобраться.
Внатуре! Большое спасибо! Очень понятно!
Пожалуйста, рад, что Вам пригодилось)
Спасибо за инфу. Как-то не приходилось выбирать между движками, всё работал на поддержке уже готовых проектов. Сейчас стал вопрос с выбором движка для хранения кучи инфы, и но постоянной выборке данных для рендера и логики. Статья помогла, спасибо еще раз!
Не за что!
ДвижОк, а не движек.
Спасибо. Исправил
привет из 2020. Статья супер. Открла глаза, теперь часть MyISAM, а часть innoDB