MySql: MyISAM против Inno DB!

В чем разница между типами MyISAM и Inno DB в MySql?


person Arron S    schedule 10.11.2008    source источник
comment
возможный дубликат MyISAM по сравнению с InnoDB   -  person Michel Ayres    schedule 25.02.2014


Ответы (12)


Основное отличие состоит в том, что InnoDB поддерживает транзакции, а MyISAM - нет.

Есть множество других отличий, но я знаю наиболее распространенные из них:

  • MyISAM обычно считается более быстрым при поиске, но недавние улучшения InnoDB устраняют эту разницу и улучшают производительность рабочих нагрузок с высоким параллелизмом.
  • InnoDB поддерживает транзакции, в то время как MyISAM не поддерживает
  • InnoDB поддерживает ссылочную целостность, в то время как MyISAM не поддерживает
  • InnoDB обрабатывает индексы немного по-другому, сохраняя первичный ключ как часть каждого индекса (заставляя индексы занимать больше места на диске, но также делая покрывающий индекс более вероятным)
  • MyISAM выполняет блокировку на уровне таблицы, в то время как InnoDB может выполнять блокировку на уровне строк.
  • В файлах конфигурации MySQL используются различные настройки памяти / буфера / индекса.
  • Обычно говорят, что InnoDB имеет лучшее восстановление после сбоев.
  • Как упоминалось в другом ответе, данные хранятся на диске по-другому. Я считаю, что InnoDB настраивается в этой области и может иметь один файл для каждой таблицы и т. Д., Если требуется.

Я уверен, что поиск в Google или на сайте MySQL позволит более подробно изучить множество других различий.

person Jarod Elliott    schedule 10.11.2008
comment
Недавние улучшения производительности InnoDB устранили преимущества MyISAM, за исключением некоторых крайних случаев. - person Bill Karwin; 29.04.2009
comment
@Bill - согласен - я тоже следил за этими улучшениями. Я обновил свой ответ. - person Jarod Elliott; 29.04.2009
comment
Это обсуждение привлекло мое внимание, когда я еще раз возвращался к теме отсутствия транзакций на eBay: infoq.com/ интервью / dan-pritchett-ebay-architecture. Особенно интересен ваш комментарий: Недавние улучшения в производительности InnoDB устранили преимущества MyISAM. Я хочу сделать свой веб-сайт более масштабируемым, в основном в качестве упражнения. MySQL - это длинный столб в палатке прямо сейчас, поэтому я хотел бы увидеть параллельный тест производительности, Hibernate + InnoDB (это то, что у меня есть прямо сейчас), против SQL + MyIsam. Возможно, придется написать свой собственный. OTOH, редизайн стола может быть первым заказом автобуса. - person Don Branson; 04.08.2009
comment
@Don - извините, я не могу помочь с точными тестами производительности, которые вам нужны, но для улучшения масштабирования попробуйте специально взглянуть на MySQL 5.4 (все еще в бета-версии), плагин InnoDB и XtraDB от Percona. Многие из улучшений масштабирования на нескольких процессорах были включены в эти версии, а также другие исправления, которые могут быть применены. OurDelta также выполняет сборки MySQL со многими включенными исправлениями. Правильная настройка памяти более важна для InnoDB по сравнению с MyISAM, и я обнаружил, что дизайн таблицы, правильное индексирование, а затем переработка запросов также очень полезны. - person Jarod Elliott; 04.08.2009
comment
Я сделал новую установку mysql и создал таблицу со столбцами ID (ключ), Name (строка). Каждая вставка (через интерфейс C) занимала 10 мс, когда табелем была InnoDB. В MyISAM это заняло 0,037 мс. Запись в csv с помощью fwritef заняла 0,007 мс. Поэтому я думаю, что для быстрой регистрации MyISAM имеет превосходную производительность. - person Michael Nielsen; 30.10.2017

InnoDB и MyISAM

Сравнение функций и производительности:

  1. InnoDB новее, а MyISAM старше.
  2. InnoDB сложнее, а MyISAM проще.
  3. InnoDB более строг в отношении целостности данных, в то время как MyISAM свободен.
  4. InnoDB реализует блокировку на уровне строк для вставки и обновления, в то время как MyISAM реализует блокировку на уровне таблицы.
  5. InnoDB имеет транзакции, а MyISAM - нет.
  6. InnoDB имеет внешние ключи и ограничения отношений, а MyISAM - нет.
  7. InnoDB имеет лучшее восстановление после сбоев, в то время как MyISAM плохо восстанавливает целостность данных при сбоях системы.
  8. MyISAM имеет индекс полнотекстового поиска, а InnoDB - нет.

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

Преимущества InnoDB

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

Недостатки InnoDB

  1. Поскольку InnoDB должен заботиться о различных отношениях между таблицами, администратору базы данных и создателям схем приходится тратить больше времени на проектирование моделей данных, которые более сложны, чем модели MyISAM.
  2. Потребляет больше системных ресурсов, таких как ОЗУ. Фактически, многие рекомендуют выключить движок InnoDB, если в этом нет существенной необходимости после установки MySQL.
  3. Нет полнотекстовой индексации.

Преимущества MyISAM

  1. Проще проектировать и создавать, поэтому лучше для новичков. Не беспокойтесь о внешних связях между таблицами.
  2. Быстрее, чем InnoDB в целом, за счет более простой структуры, что значительно снижает затраты на серверные ресурсы.
  3. Полнотекстовая индексация.
  4. Особенно хорошо подходит для таблиц с интенсивным чтением (выборкой).

Недостатки MyISAM

  1. Отсутствие проверки целостности данных (например, ограничений взаимосвязи), ответственность за которую ложится на администраторов баз данных и разработчиков приложений.
  2. Не поддерживает транзакции, которые необходимы в критически важных приложениях для обработки данных, таких как банковское дело.
  3. Медленнее, чем InnoDB для таблиц, которые часто вставляются или обновляются, потому что вся таблица заблокирована для любой вставки или обновления.

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

Ссылка: Сравнение InnoDB и MyISAM

Вы также можете проверить это здесь для получения дополнительных сведений: MyISAM или движок MySQL InnoDB?

Надеюсь это поможет.

person AlphaMale    schedule 15.10.2011
comment
+1 Это отличное описание / обновление за октябрь 2011 года. - person Michael Durrant; 28.11.2011
comment
@MichaelDurrant: Но контент по-прежнему восходит к сентябрю 2009 г. - person bragboy; 25.01.2012

MyISAM поддерживает (нестандартный-SQL) полнотекстовое индексирование, которого InnoDB до сих пор не поддерживает. Это единственная причина, по которой мы сегодня используем MyISAM.

person bobince    schedule 10.11.2008
comment
Стоит отметить, что InnoDB теперь поддерживает полнотекстовую индексацию в mysql ›= 5.6 для тех, кто посетит этот пост в 2017 году. - person ; 13.01.2017

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

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

person Alexander Malfait    schedule 10.11.2008
comment
Innodb для победы! mysqlperformanceblog.com/2007 / 01/08 / - person Jon Black; 26.03.2010

Вы можете получить дополнительную информацию о MyISAM и InnoDB в документации MySQL:

http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html

http://dev.mysql.com/doc/refman/5.1/en/innodb-overview.html

person sebthebert    schedule 10.11.2008

Основное отличие состоит в том, что InnoDB поддерживает транзакции. , а MyISAM - нет.

person Greg    schedule 10.11.2008

MyISAM и InnoDB также по-разному хранят свои данные на диске. MyISAM использует файл данных и индексный файл для каждой таблицы, хранящиеся в каталоге, названном в честь базы данных. InnoDB, кажется, объединяет все в один файл с именем ibdata1.

person Greg    schedule 10.11.2008
comment
Можно заставить InnoDB хранить данные отдельно, даже если это не поведение по умолчанию. - person pilsetnieks; 10.11.2008
comment
innodb_file_per_table dev.mysql.com/doc/refman/5.0/en /multiple-tablespaces.html - person Jon Black; 26.03.2010

Поддержка NFS

В отличие от MyISAM, InnoDB может иметь проблемы с NFS.

Из Настройка InnoDB (MySQL версии 5.5)

Осторожность

Если надежность важна для ваших данных, не настраивайте InnoDB для использования файлов данных или файлов журналов на томах NFS. Возможные проблемы различаются в зависимости от ОС и версии NFS и включают такие проблемы, как отсутствие защиты от конфликтующих операций записи и ограничения максимального размера файлов.

person Christopher Bottoms    schedule 14.10.2010

Особенности InnoDB 1. Обеспечивает полную транзакционную способность с полным соответствием ACID (атомарность, согласованность, изоляция и долговечность).

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

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

  3. InnoDB поддерживает ограничения внешнего ключа

  4. InnoDB поддерживает автоматическое восстановление после сбоя
  5. InnoDB поддерживает сжатие таблиц (чтение / запись)
  6. InnoDB поддерживает типы пространственных данных (без пространственных индексов)

  7. Innodb поддерживает неблокирующую ТАБЛИЦУ АНАЛИЗА и требуется только в том случае, если сервер работает долгое время, поскольку он погружается в статистику индекса и получает информацию об индексе при открытии таблицы.

  8. Innodb не имеет отдельных индексных файлов, поэтому их не нужно открывать.

  9. Innodb строит свои индексы по одной строке за раз в порядке первичного ключа (после ALTER), что означает, что деревья индексов не построены в оптимальном порядке и фрагментированы. В настоящее время нет способа дефрагментировать индексы InnoDB, поскольку InnoDB не может построить индексы сортировкой в ​​MySQL 5.0. Даже удаление и воссоздание индексов InnoDB может привести к фрагментированным индексам, в зависимости от данных.

  10. Таблица может содержать не более 1000 столбцов.

  11. Максимальная внутренняя длина ключа InnoDB составляет 3500 байтов, но сам MySQL ограничивает ее 3072 байтами. (1024 байта для не 64-разрядных сборок до MySQL 5.0.17 и для всех сборок до 5.0.15.)

  12. Размер страницы базы данных по умолчанию в InnoDB составляет 16 КБ. Перекомпилировав код, вы можете установить для него значения от 8 КБ до 64 КБ. Вы должны обновить значения UNIV_PAGE_SIZE и UNIV_PAGE_SIZE_SHIFT в исходном файле univ.i.
  13. Таблицы InnoDB не поддерживают индексы FULLTEXT.

    Возможности MYISAM

    1. No Transaction support
    2. Блокировка на уровне таблицы
    3. Обеспечивает полнотекстовый поиск
    4. Нет ограничений на данные в таблице.
    5. быстрый COUNT (*) s (когда WHERE, GROUP BY или JOIN не используются)
    6. полнотекстовая индексация
    7. меньшая занимаемая площадь на диске
    8. очень высокое сжатие таблицы (только чтение)
    9. типы пространственных данных и индексы (R-tree)
  14. Используя DATA DIRECTORY = '/ path / to / data / directory' или INDEX DIRECTORY = '/ path / to / index / directory', вы можете указать, где механизм хранения MyISAM должен поместить файл данных таблицы и индексный файл. Каталог должен быть полным путем к каталогу, а не относительным путем.

вы можете найти более подробную информацию на http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.html

person faisalbhagat    schedule 10.09.2014

Вот описание различий между InnoDB и MyIsam:

Различия между InnoDB и MyIsam

Немного отличий:

  • MYISAM не поддерживает транзакции с базой данных,
  • INNODB предоставит транзакции
  • MYISAM обеспечивает блокировку на уровне таблицы,
  • INNODB обеспечивает блокировку на уровне строк.
  • INNOBD поддерживает внешние ключи, MYISAM не ...
person Fred    schedule 10.11.2008

MyISAM более удобен, когда дело доходит до резервного копирования, поскольку довольно просто заблокировать все таблицы и скопировать файлы прямо в файловую систему. (mysqlhotcopy, который является Perl-скриптом, даже является частью mysql afaik)

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

Однако есть коммерческое программное обеспечение, которое предлагает горячее копирование InnoDB.

person jishi    schedule 10.11.2008
comment
Вообще-то, нет. InnoDB более удобен для резервного копирования, потому что он может предоставить согласованный моментальный снимок базы данных без блокировки каждой таблицы. mysqldump --single-transaction делает это. MyISAM требует, чтобы вы выключили базу данных при копировании файлов. - person Seun Osewa; 02.08.2010
comment
Когда я сказал, что удобнее, я сказал, что это быстрее, как при сбросе, так и при восстановлении, поскольку вы можете просто скопировать файлы данных. Вам не нужно выключать базу данных, только заблокируйте таблицы. Если вам нужна согласованная копия, вам нужно только заблокировать все таблицы перед копированием, однако менее навязчиво просто заблокировать таблицу, которую вы копируете. Но да, дамп innoDB позволит записывать в базу данных во время операции, но для дампа большой таблицы может потребоваться вечность (несколько часов), в отличие от копии файла MyISAM, которая завершится за считанные минуты. - person jishi; 02.08.2010

Хотя поддержка транзакций является основным отличием, блокировка на уровне таблицы может стать проблемой, если у вас есть длительные запросы SELECT, смешанные с операторами UPDATE.

person Community    schedule 13.10.2009