В чем разница между типами MyISAM и Inno DB в MySql?
MySql: MyISAM против Inno DB!
Ответы (12)
Основное отличие состоит в том, что 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 или движок MySQL InnoDB? а>
Надеюсь это поможет.
MyISAM поддерживает (нестандартный-SQL) полнотекстовое индексирование, которого InnoDB до сих пор не поддерживает. Это единственная причина, по которой мы сегодня используем MyISAM.
Наиболее важное различие между MyISAM и InnoDB состоит в том, что InnoDB поддерживает транзакции и внешние ключи. Если вам нужны внешние ключи и связанные с ними функции (например, автоматическое каскадное удаление), вам нужно будет использовать InnoDB.
InnoDB медленнее MyISAM для большинства применений, но может работать быстрее в определенных условиях из-за лучшего механизма блокировки; MyISAM блокирует всю таблицу для чтения во время выполнения вставки / обновления. InnoDB может выполнять блокировку на уровне строк, что позволяет выполнять несколько одновременных операций записи и чтения в таблице.
Вы можете получить дополнительную информацию о 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
Основное отличие состоит в том, что InnoDB поддерживает транзакции. , а MyISAM - нет.
MyISAM и InnoDB также по-разному хранят свои данные на диске. MyISAM использует файл данных и индексный файл для каждой таблицы, хранящиеся в каталоге, названном в честь базы данных. InnoDB, кажется, объединяет все в один файл с именем ibdata1.
Поддержка NFS
В отличие от MyISAM, InnoDB может иметь проблемы с NFS.
Из Настройка InnoDB (MySQL версии 5.5)
Осторожность
Если надежность важна для ваших данных, не настраивайте InnoDB для использования файлов данных или файлов журналов на томах NFS. Возможные проблемы различаются в зависимости от ОС и версии NFS и включают такие проблемы, как отсутствие защиты от конфликтующих операций записи и ограничения максимального размера файлов.
Особенности InnoDB 1. Обеспечивает полную транзакционную способность с полным соответствием ACID (атомарность, согласованность, изоляция и долговечность).
Он имеет блокировку на уровне строк. Поддерживая блокировку на уровне строк, вы можете добавлять данные в таблицу InnoDB без блокировки таблицы при каждой вставке движком, что ускоряет как восстановление, так и хранение информации в базе данных.
Ключом к системе InnoDB является структура базы данных, кэширования и индексации, в которой индексы и данные кэшируются в памяти, а также хранятся на диске. Это обеспечивает очень быстрое восстановление и работает даже с очень большими наборами данных.
InnoDB поддерживает ограничения внешнего ключа
- InnoDB поддерживает автоматическое восстановление после сбоя
- InnoDB поддерживает сжатие таблиц (чтение / запись)
InnoDB поддерживает типы пространственных данных (без пространственных индексов)
Innodb поддерживает неблокирующую ТАБЛИЦУ АНАЛИЗА и требуется только в том случае, если сервер работает долгое время, поскольку он погружается в статистику индекса и получает информацию об индексе при открытии таблицы.
Innodb не имеет отдельных индексных файлов, поэтому их не нужно открывать.
Innodb строит свои индексы по одной строке за раз в порядке первичного ключа (после ALTER), что означает, что деревья индексов не построены в оптимальном порядке и фрагментированы. В настоящее время нет способа дефрагментировать индексы InnoDB, поскольку InnoDB не может построить индексы сортировкой в MySQL 5.0. Даже удаление и воссоздание индексов InnoDB может привести к фрагментированным индексам, в зависимости от данных.
Таблица может содержать не более 1000 столбцов.
Максимальная внутренняя длина ключа InnoDB составляет 3500 байтов, но сам MySQL ограничивает ее 3072 байтами. (1024 байта для не 64-разрядных сборок до MySQL 5.0.17 и для всех сборок до 5.0.15.)
- Размер страницы базы данных по умолчанию в InnoDB составляет 16 КБ. Перекомпилировав код, вы можете установить для него значения от 8 КБ до 64 КБ. Вы должны обновить значения UNIV_PAGE_SIZE и UNIV_PAGE_SIZE_SHIFT в исходном файле univ.i.
Таблицы InnoDB не поддерживают индексы FULLTEXT.
Возможности MYISAM
- No Transaction support
- Блокировка на уровне таблицы
- Обеспечивает полнотекстовый поиск
- Нет ограничений на данные в таблице.
- быстрый COUNT (*) s (когда WHERE, GROUP BY или JOIN не используются)
- полнотекстовая индексация
- меньшая занимаемая площадь на диске
- очень высокое сжатие таблицы (только чтение)
- типы пространственных данных и индексы (R-tree)
- Используя DATA DIRECTORY = '/ path / to / data / directory' или INDEX DIRECTORY = '/ path / to / index / directory', вы можете указать, где механизм хранения MyISAM должен поместить файл данных таблицы и индексный файл. Каталог должен быть полным путем к каталогу, а не относительным путем.
вы можете найти более подробную информацию на http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.html
Вот описание различий между InnoDB и MyIsam:
Различия между InnoDB и MyIsam
Немного отличий:
- MYISAM не поддерживает транзакции с базой данных,
- INNODB предоставит транзакции
- MYISAM обеспечивает блокировку на уровне таблицы,
- INNODB обеспечивает блокировку на уровне строк.
- INNOBD поддерживает внешние ключи, MYISAM не ...
MyISAM более удобен, когда дело доходит до резервного копирования, поскольку довольно просто заблокировать все таблицы и скопировать файлы прямо в файловую систему. (mysqlhotcopy, который является Perl-скриптом, даже является частью mysql afaik)
InnoDB немного сложнее, и простого копирования файлов не будет, поскольку они не могут быть восстановлены на другом компьютере из коробки.
Однако есть коммерческое программное обеспечение, которое предлагает горячее копирование InnoDB.
Хотя поддержка транзакций является основным отличием, блокировка на уровне таблицы может стать проблемой, если у вас есть длительные запросы SELECT, смешанные с операторами UPDATE.