Вопрос

Каковы различия между типами MyISAM и Inno DB в MySql?

Это было полезно?

Решение

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

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

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

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

Другие советы

  

InnoDB и MyISAM

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

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

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

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

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

    <Ол>
  • Проще спроектировать и создать, поэтому лучше для начинающих. Не беспокойтесь о внешних отношениях между таблицами.
  • Быстрее, чем InnoDB в целом, благодаря более простой структуре, что значительно снижает затраты ресурсов сервера.
  • Полнотекстовая индексация.
  • Особенно хорошо подходит для таблиц с интенсивным чтением (выберите).
  • Недостатки MyISAM

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

    Справка: Сравнение InnoDB и MyISAM

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

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

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

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

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

    Вы можете получить больше информации о MyISAM & amp; 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

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

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

    Поддержка НФС

    В отличие от MyISAM, у InnoDB могут возникнуть проблемы с NFS.

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

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

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

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

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

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

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

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

    7. Innodb поддерживает неблокирующую ANALYZE TABLE и требуется только в том случае, если сервер долгое время работал, поскольку он погружается в статистику индекса и получает информацию об индексе при открытии таблицы.

    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 Особенности

      <Ол>
    14. Нет поддержки транзакций
    15. Блокировка на уровне таблицы
    16. Обеспечивает полнотекстовый поиск
    17. Нет ограничений на данные в таблице.
    18. fast COUNT (*) s (когда WHERE, GROUP BY или JOIN не используются)
    19. полнотекстовая индексация
    20. меньше места на диске
    21. очень высокая степень сжатия таблицы (только для чтения)
    22. пространственные типы данных и индексы (R-дерево)
    23. Используя DATA DIRECTORY = '/ path / to / data / directory' или INDEX DIRECTORY = '/ path / to / index / directory', вы можете указать, где механизм хранения MyISAM должен положить файл данных таблицы и индексный файл. Каталог должен быть полным путем к каталогу, а не относительным путем.
    24. вы можете найти более подробную информацию на http://faisalbhagat.blogspot.com/2014/09/innodb-vs -myisam.html

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

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

    Несколько отличий:

    • МЬИСАМ не поддерживает никаких транзакций базы данных,
    • ИННОДБ обеспечит транзакции
    • МЬИСАМ обеспечивает блокировку на уровне таблицы,
    • ИННОДБ обеспечивает блокировку на уровне строки
    • ИННОБД поддерживает внешние ключи, МЬИСАМ не...

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top