Основные отличия InnoDB и MyISAM

Наиболее часто используемыми механизмами хранения данных в MySQL являются MyISAM и InnoDB.

У этих систем хранения данных есть некоторые преимущества и недостатки в зависимости от потребностей приложения.

Как вы все знаете, механизм хранения данных по умолчанию, выбранный базой данных MySQL — MyISAM.

Основные различия между MyISAM и INNODB заключается в следующем:
  • MyISAM не поддерживает транзакции по таблицам, в то время как InnoDB поддерживает.
  • В MyISAM нет возможности блокировки на уровне строк, реляционной целостности, но с InnoDB это возможно. MyISAM имеет блокировку на уровне таблиц.
  • InnoDB не поддерживает ПОЛНОТЕКСТОВЫЙ индекс, в то время как MyISAM поддерживает.
  • Скорость работы таблицы MyISAM значительно выше по сравнению с таблицами в InnoDB.
  • InnoDB — лучший вариант, когда вы имеете дело с большей базой данных, потому что он поддерживает транзакции, объем, в то время как MyISAM подходит для небольшого проекта.
  • Поскольку InnoDB поддерживает блокировку на уровне строк, это означает, что вставка и обновление намного быстрее по сравнению с MyISAM.
  • InnoDB поддерживает свойство ACID (Атомарность, Консистенция, Изоляция и Долговечность), в то время как MyISAM не поддерживает.
  • В таблице InnoDB поле AUTO_INCREMENT является частью индекса.
  • Как только таблица в InnoDB удалена, то она не может быть восстановлена.
  • InnoDB не сохраняет данные как уровень таблицы, поэтому при реализации select count(*) from table будет снова сканировать всю таблицу, чтобы вычислить количество строк, в то время как MyISAM сохраняет данные как уровень таблицы, так что вы можете легко прочитать сохраненный номер строки.
  • MyISAM не поддерживает ограничения ссылочной целостности ВНЕШНЕГО КЛЮЧА, в то время как InnoDB поддерживает.
  • Вы можете выбрать механизм хранения данных в соответствии с потребностями приложения, потому что оба они имеют некоторые преимущества и недостатки.

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

Как определить, какой движок вы используете?

А) Проверка через консоль SSH

1. Откройте терминал и войдите в MySQL. Затем отобразите список баз данных:
SHOW DATABASES;
2. Найдите предпочтительную базу данных из списка и выберите ее:
USE database_name;
3. Затем используйте команду SHOW CREATE TABLE для отображения информации о таблице и механизме хранения:
SHOW CREATE TABLE database_name.table_name;
В приведенном ниже примере выходные данные перечисляют MyISAM как механизм хранения данных по умолчанию.

Примечание: Замените database_name и table_name именем вашей базы данных и таблицы.

Б) Проверка через phpMyAdmin

Есть два способа проверить механизм хранения данных по умолчанию в phpMyAdmin:
  • Из списка таблиц.
  • Запустив запрос.

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

Из списка таблиц

1. Откройте phpMyAdmin и выберите предпочтительную базу данных из списка.

2. В списке Таблица найдите столбец Тип, чтобы просмотреть типы механизмов хранения. В нашем примере таблица x_admin_logs использует MyISAM в качестве механизма хранения данных по умолчанию.

Запустив запрос

Другой способ отображения механизма хранения по умолчанию-это выполнение запроса.

1. Войдите в phpMyAdmin и выберите предпочтительную базу данных из списка баз данных.

2. Выберите вкладку SQL, чтобы получить доступ к параметрам запроса.

3. Введите следующую команду для отображения всех таблиц, использующих MyISAM в качестве механизма хранения:

SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'database_name' and ENGINE = 'myISAM';
4. Нажмите кнопку Вперед, чтобы выполнить запрос.

На выходе отображается список всех таблиц, содержащих механизм хранения MyISAM.

Примечание: Замените database_name именем вашей базы данных.

Вы можете использовать ту же команду для поиска баз данных с помощью механизма хранения InnoDB. Измените запрос, заменив ENGINE = 'MyISAM' на ENGINE = 'InnoDB'.

Как сконвертировать MyISAM в InnoDB

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

Если вы намереваетесь сделать несколько временных копий ваших данных в таблицах InnoDB во время процесса преобразования, рекомендуется создать таблицы в табличных пространствах file-per-table, чтобы вы могли освободить дисковое пространство при удалении таблиц. Когда опция конфигурации innodb_file_per_table включена (по умолчанию), вновь созданные таблицы InnoDB неявно создаются в табличных пространствах file-per-table.

Независимо от того, преобразуете ли вы таблицу MyISAM напрямую или создаете клонированную таблицу InnoDB, убедитесь, что у вас достаточно места на диске для хранения как старых, так и новых таблиц во время процесса. Таблицы InnoDB требуют больше дискового пространства, чем таблицы MyISAM. Если операция ALTER TABLE заканчивается, она запускает откат, и это может занять несколько часов, если она привязана к диску. Для вставок InnoDB использует буфер вставки для объединения вторичных индексных записей с индексами в пакетах. Это экономит много дискового ввода-вывода. Для отката такой механизм не используется, и откат может занять в 30 раз больше времени, чем вставка.

В случае безудержного отката, если у вас нет ценных данных в базе данных, может быть целесообразно убить процесс базы данных, а не ждать завершения миллионов операций дискового ввода-вывода.

Преобразование механизма хранения данных через терминал

Выполните команду ALTER TABLE в оболочке MySQL, чтобы преобразовать механизм хранения данных из MyISAM в InnoDB и наоборот.

Чтобы преобразовать InnoDB в MyISAM, выполните:
ALTER TABLE database_name.table_name ENGINE=MyISAM;
Чтобы преобразовать MyISAM в InnoDB, выполните:
ALTER TABLE database_name.table_name ENGINE=InnoDB;
Терминал выведет подтверждающее сообщение.


Преобразование механизма хранения данных с помощью phpMyAdmin

Существует два способа преобразования механизма хранения данных в phpMyAdmin:
  • Использование меню Операций с таблицами.
  • Запуск запроса.
Использование меню Операций
1. Выберите предпочтительную базу данных в меню базы данных.

2. Выберите таблицу, для которой вы хотите изменить механизм хранения, и выберите раскрывающееся меню «Еще».

3. Нажмите кнопку Операции, чтобы открыть меню.


4. Найдите параметр Тип таблиц в группе Параметры таблицы и щелкните его, чтобы загрузить раскрывающееся меню, содержащее различные механизмы хранения. Выберите InnoDB из списка и нажмите кнопку Вперед, чтобы сохранить изменения.
Выполнение запроса
1. Откройте командный центр SQL для предпочтительной базы данных.

2. Выполните команду ALTER TABLE в оболочке MySQL, чтобы преобразовать механизм хранения.


Чтобы перейти в MyISAM, выполните команду:
ALTER TABLE table_name ENGINE=MyISAM;
Чтобы перейти в InnoDB, выполните команду:
ALTER TABLE.table_name ENGINE=InnoDB;
3. Нажмите кнопку Вперед, чтобы запустить запрос.

Вы успешно преобразовали механизм хранения.