В чем разница между MyISAM и InnoDB?

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

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

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

2 ответа

Решение

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

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

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

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

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

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


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

MYISAM:

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

INNODB:

  1. InnoDB поддерживает блокировку на уровне строк
  2. InnoDB рассчитан на максимальную производительность при обработке большого объема данных
  3. InnoDB поддерживает внешние ключи, поэтому мы называем MySQL с InnoDB RDBMS
  4. InnoDB хранит свои таблицы и индексы в табличном пространстве
  5. InnoDB поддерживает транзакции. Вы можете зафиксировать и откатить с InnoDB
Другие вопросы по тегам