Что такое InnoDB и MyISAM в MySQL?


122

Что есть InnoDBи MyISAMв MySQL?


8
Дубликат MySql: MyISAM против Inno DB! , или вы можете выбрать: stackoverflow.com/search?q=myisam+vs+innodb
OMG Ponies

Это движок базы данных ... kavoir.com/2009/09/…
Matthieu

можем ли мы использовать оба механизма хранения для нашей базы данных одновременно?
user130561

1
Вы можете использовать их одновременно на разных столах, но для одной данной таблицы вам нужно будет выбрать, какой из них вы хотите использовать ...
Матье,

Ответы:


111

InnoDBи MYISAM, являются механизмами хранения MySQL.

Эти два варианта отличаются реализацией блокировки: InnoDBблокирует конкретную строку в таблице и MyISAMблокирует всю MySQLтаблицу.

Вы можете указать тип, задав MYISAMИЛИ InnoDBпри создании таблицы в БД.


Ясный и простой ответ.
vadiraj jahagirdar

38

Посмотри на

InnoDB и MyISAM

InnoDB - это механизм хранения для MySQL, входящий в стандартную комплектацию всех текущих двоичных файлов, распространяемых MySQL AB. Его основным улучшением по сравнению с другими механизмами хранения, доступными для использования с MySQL, является поддержка транзакций, совместимых с ACID.

MyISAM - это механизм хранения по умолчанию для версий системы управления реляционными базами данных MySQL до 5.5 1 . Он основан на более старом коде ISAM, но имеет множество полезных расширений. Главный недостаток MyISAM - отсутствие поддержки транзакций. Версии MySQL 5.5 и выше перешли на движок InnoDB, чтобы гарантировать ограничения ссылочной целостности и более высокий уровень параллелизма.


1
можем ли мы использовать оба механизма хранения для нашей базы данных одновременно?
user130561

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

18

Это механизмы хранения.

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

MyISAM: механизм хранения MySQL по умолчанию, наиболее часто используемый в Интернете, хранилищах данных и других средах приложений. MyISAM поддерживается во всех конфигурациях MySQL и является механизмом хранения по умолчанию, если вы не настроили MySQL для использования другого по умолчанию.

InnoDB: безопасный для транзакций (ACID-совместимый) механизм хранения для MySQL, который имеет возможности фиксации, отката и восстановления после сбоя для защиты пользовательских данных. Блокировка на уровне строк InnoDB (без перехода к блокировкам с более грубой степенью детализации) и последовательные неблокирующие чтения в стиле Oracle увеличивают многопользовательский параллелизм и производительность. InnoDB хранит пользовательские данные в кластерных индексах, чтобы уменьшить количество операций ввода-вывода для общих запросов на основе первичных ключей. Для поддержания целостности данных InnoDB также поддерживает ограничения ссылочной целостности FOREIGN KEY.


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

3
Как упоминалось в моем сообщении, по умолчанию используется MyISAM. Если вы хотите использовать функции другого механизма хранения, такого как INNODB, тогда да, вам нужно будет указать. Это делается не во время установки, а во время первоначального создания таблицы.
mluebke

3
Но согласно этому: - dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; Движок по умолчанию - InnoDB.
Харша

2
Согласно dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : «Механизмом по умолчанию является InnoDB с MySQL 5.5.5 (MyISAM до 5.5.5)» Таким образом, механизм по умолчанию теперь InnoDB. Этот ответ был опубликован через 16 дней после первого общедоступного выпуска с InnoDB в качестве движка по умолчанию;)
SOFe

6

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

Тем не менее, InnoDB все время становится лучше:

InnoDB 1.1 Улучшения производительности и масштабируемости


4

MyISAM не следует ACID, в отличие от InnoDB, который следует транзакциям для поддержания целостности данных.

MyISAM поддерживает одновременные вставки: если таблица не имеет свободных блоков в середине файла данных, вы можете ВСТАВИТЬ в нее новые строки одновременно с чтением других потоков из таблицы. MySqlDoc

Вот почему MyISAM быстрее и занимает меньше места. Например, MySQL MyISAM Storage Engine не поддерживает транзакции. ограничения MySQL MYISAM Есть бит, называемый concurrent-insert По умолчанию переменная установлена ​​в 1, и одновременные вставки обрабатываются, как только что описано. Если установлено значение 0, одновременные вставки отключены. Если установлено значение 2, одновременные вставки в конец таблицы разрешены даже для таблиц, в которых были удалены строки. Оператор INSERT может быть выполнен для добавления строк в конец таблицы с одновременным выбором, если в середине таблицы нет дыр / удаленных строк (во время одновременной вставки).

Уровень изоляции mysql InnoDB по умолчанию - «Повторяемое чтение». Для MyISAM транзакции нет. InnoDB использует блокировку на уровне строк, в то время как MyISAM может использовать только блокировку на уровне таблицы, поэтому InnoDB имеет более качественное восстановление после сбоя, чем MyISAM. Чтобы избежать эффектов параллелизма, необходимо вручную установить блокировку уровня таблицы в MyISAM.


3

InnoDB - это механизм хранения транзакций MySQL, тогда как MyISAM - нетранзакционный механизм хранения. Другими словами, InnoDB следует свойствам ACID для поддержания целостности данных, но MyISAM не следует свойствам ACID, таким образом не поддерживая целостность данных.

В таблице InnoDB (транзакционной) транзакционные изменения могут быть легко отменены, если требуется откат. Но изменения, внесенные в таблицу MyISAM (не транзакционную), нельзя отменить, если требуется откат транзакции.

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

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

Предположим, на шаге 4 происходит сбой процесса. Если здесь использовалась таблица InnoDB, откат отменил бы изменения, и вы избавились от риска потери денег. Буквально таблица не знает о каком-либо сбое, поскольку изменения не будут зафиксированы в таблице, если шаг 5 не будет успешно выполнен.

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

Пример любезно предоставлен: «Высокопроизводительный MySQL: оптимизация, резервное копирование и репликация» - книга Арьена Ленца, Дерека Дж. Баллинга, Джереми Заводного, Петра Зайцева и Вадима Ткаченко


1

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


0

InnoDB по умолчанию НЕ myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB является механизмом хранения MySQL по умолчанию. Если вы не настроили другой механизм хранения по умолчанию, выдача Оператор CREATE TABLE без предложения ENGINE = создает таблицу InnoDB "

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.