Какая разница между MyISAM и InnoDB?

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

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

Какая разница между MyISAM и InnoDB, и что я должен искать при попытке решить одно или другое?

Ответ 1

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

Если вам нужна база данных для обеспечения ограничений внешнего ключа или вам нужна база данных для поддержки транзакций (т.е. изменения, сделанные двумя или более операциями DML, обрабатываемыми как единое целое, со всеми внесенными изменениями или всеми изменения вернулись), тогда вы выберете движок InnoDB, так как эти функции отсутствуют в двигателе MyISAM.

Это два самых больших различия. Другое большое различие - concurrency. С помощью MyISAM оператор DML получит исключительную блокировку в таблице, и если эта блокировка сохранена, ни один другой сеанс не может выполнять операцию SELECT или DML в таблице.

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

Таким образом, при выборе между InnoDB и MyISAM первым шагом является определение того, нужны ли вам функции, предоставляемые InnoDB. Если нет, тогда MyISAM будет рассмотрен.

Более подробное обсуждение различий довольно непрактично (на этом форуме) отсутствует более подробное обсуждение проблемного пространства... как приложение будет использовать базу данных, сколько таблиц, размер таблиц, загруженность транзакций, томов выбора, вставки, обновлений, требований concurrency, функций репликации и т.д.


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

Ответ 2

MYISAM:

  • MYISAM поддерживает блокировку на уровне таблиц
  • MyISAM предназначен для скорости
  • MyISAM не поддерживает внешние ключи, поэтому мы называем MySQL с MYISAM СУБД
  • MyISAM хранит свои таблицы, данные и индексы в дисковом пространстве, используя отдельные три разных файла. (tablename.FRM, tablename.MYD, tablename.MYI)
  • MYISAM не поддерживает транзакцию. Вы не можете совершать и откатывать с помощью MYISAM. После того, как вы выполните команду, она будет выполнена.
  • MYISAM поддерживает полнотекстовый поиск
  • Вы можете использовать MyISAM, если таблица более статична с большим количеством выборок и меньше обновлений и удаления.

INNODB:

  • InnoDB поддерживает блокировку уровня строки
  • InnoDB предназначен для максимальной производительности при обработке большого объема данных
  • InnoDB поддерживает внешние ключи, поэтому мы называем MySQL с помощью InnoDB RDBMS
  • InnoDB сохраняет свои таблицы и индексы в табличном пространстве
  • InnoDB поддерживает транзакцию. Вы можете совершать и откатываться с помощью InnoDB