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

< Назад
Содержание

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.

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

один × пять =

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

20 − шесть =

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

5 × три =