MySQL: отличия между MyISAM и InnoDB

Отличия между системами хранения данных 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: отличия между MyISAM и InnoDB: 29 комментариев

  1. Pavel

    MySQL версия 5.6 К ключевым улучшения можно отнести: поддержка средств полнотекстового поиска, возможность доступа к данным через memcached API, увеличена производительность работы при интенсивной записи данных, а также увеличена масштабируемость при обработке большого числа одновременных запросов.

  2. Игорь

    Бинарное копирование:
    … Базу данных InnoDB можно перенести, просто скопировав все относящиеся к ней файлы … (7.5.7 Перенесение базы данных InnoDB на другой компьютер)

  3. Уведомление: MySQL: отличия между MyISAM и InnoDB — This is nothing more than a notebook

  4. Сергей

    По вашим тогам выбрал для себя MyISAM, так как на сайте в основном только запросы вида SELECT. Записи почти нет. Думаю MyISAM будет быстрее.

  5. Уведомление: MySQL: отличия между MyISAM и InnoDB

  6. Сергей

    Спасибо за инфу. Как-то не приходилось выбирать между движками, всё работал на поддержке уже готовых проектов. Сейчас стал вопрос с выбором движка для хранения кучи инфы, и но постоянной выборке данных для рендера и логики. Статья помогла, спасибо еще раз!

  7. Дмитрий 4

    Посмотрел много статей, но тут будто понятней всего расписали суть, и короче всего.

    Спасибо за статью!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *