Отличия движков InnoDB от MyISAM в MySQL

Обновлено: Август 26, 2019
< Назад

InnoDB и MyISAM являются двумя движками с которыми работает MySQL. Таблицы на одном сервере баз данных могут быть как одного типа, так и обоих. Рассмотрим основные отличия InnoDB от MyISAM.

Поскольку некоторые проекты развиваются в течение длительного времени — типы таблиц часто смешиваются и продолжают оставаться в таком виде.

Отличия InnoDB от MyISAM

Главное преимущество InnoDB в скорости работы — при выполнении запроса к базе InnoDB происходит блокировка строки, при выполнении же запроса к базе MyISAM блокируется таблица, это означает, что пока запрос выполнен не будет никакие другие обращения к таблице/строке будут невозможны. Поскольку строки значительно меньше InnoDB обрабатывается быстрее.

InnoDB в отличии от MyISAM поддерживает транзакции, а MyISAM имеет полнотекстовый поиск для всех версий Mysql (для InnoDB такая поддержка есть только для версий старше 5.6.4)

MyISAM таблицы можно без всяких трудностей конвертировать в InnoDB (как и выполнять преобразование в обратном направлении). Это делается при помощи ALTER TABLE или скриптом если таблиц много.

При ковертации стоит иметь в виду, что начиная с версии MySQL 5.6 и эквивалентной ей MariaDB 10 InnoDB является движком по умолчанию. Для ранних версий по умолчанию таблицы создавались в MyISAM.

В настоящее время InnoDB используется значительно чаще, но есть два важных момента:

Недостатки InnoDB:
  1. InnoDB также сложнее восстанавливать после сбоя в работе сервера, для MyISAMвосстановление заключается в применении утилиты myisamchk
  2. Изначально сами данные как составляющая таблиц хранятся в одном файле ibdata1. Информация из этого файла не удаляется. Т.е. если таблица добавлена, в нее загружен дамп, потом таблица удалена — в ibdata1 содержимое останется и будет накапливаться занимая дисковое пространство.  Также хранение данных по всем таблицам в одном файле означает, что с таблицами сложнее работать, нельзя перемещать их и восстанавливать из резервных копий по отдельности.

Второй вопрос решается добавлением в конфигурационный файл директивы innodb_file_per_table = 1; (подробнее о хранении данных InnoDB)

mcedit /etc/mysql/my.cnf

innodb_file_per_table = 1;

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

Читайте про то как преобразовать большое количество MyISAM таблиц в InnoDB.

Автор публикации

не в сети 2 дня

Евгений Баинов

Аватар 0
Комментарии: 0Публикации: 229Регистрация: 26-04-2019

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

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

19 − 12 =

Авторизация
*
*

три × два =

Регистрация
*
*
*

8 − 7 =

Генерация пароля

7 + шесть =