В чем разница между MyISAM и InnoDB? [Дубликат]

206

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

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

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

  • 0
    Этот вопрос в настоящее время обсуждается на Мета
  • 7
    Привет, Скотт, я немного изменил формулировку твоего вопроса, чтобы попытаться вновь открыть его. Если я слишком изменил ваш вопрос, не стесняйтесь редактировать его дальше или откатить изменения. Я думаю, что вопрос - хороший вопрос, и ответ, данный ниже, является большим. Я проголосовал за его повторное открытие, но для его открытия необходимо еще 4 голоса.
Показать ещё 6 комментариев
Теги:
database
myisam
innodb

2 ответа

358
Лучший ответ

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

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

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

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

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

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


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

  • 14
    +1 "ссылочная целостность" и "транзакции", но я ожидаю, что этот вопрос будет закрыт в ближайшее время.
  • 0
    InnoDB имеет большой недостаток: он не запоминает значения автоинкремента (он сбрасывает их на самые высокие идентификаторы в таблицах при перезапуске MySQL). Таким образом, если вы используете InnoDB и вам нужны уникальные идентификаторы, вам необходимо реализовать обходной путь (например, сохранить последние идентификаторы в отдельной таблице).
Показать ещё 3 комментария
316

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
  • 9
    ПРИМЕЧАНИЕ. InnoDB может хранить отдельные таблицы в отдельных файлах, аналогично MyISAM, если при создании таблицы установлена опция innodb_file_per_table.
  • 37
    InnoDB поддержка полнотекстовых индексов была введена в v5.6.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню