Что есть InnoDB
и MyISAM
в MySQL
?
Что есть InnoDB
и MyISAM
в MySQL
?
Ответы:
InnoDB
и MYISAM
, являются механизмами хранения MySQL
.
Эти два варианта отличаются реализацией блокировки: InnoDB
блокирует конкретную строку в таблице и MyISAM
блокирует всю MySQL
таблицу.
Вы можете указать тип, задав MYISAM
ИЛИ InnoDB
при создании таблицы в БД.
Посмотри на
InnoDB - это механизм хранения для MySQL, входящий в стандартную комплектацию всех текущих двоичных файлов, распространяемых MySQL AB. Его основным улучшением по сравнению с другими механизмами хранения, доступными для использования с MySQL, является поддержка транзакций, совместимых с ACID.
MyISAM - это механизм хранения по умолчанию для версий системы управления реляционными базами данных MySQL до 5.5 1 . Он основан на более старом коде ISAM, но имеет множество полезных расширений. Главный недостаток MyISAM - отсутствие поддержки транзакций. Версии MySQL 5.5 и выше перешли на движок InnoDB, чтобы гарантировать ограничения ссылочной целостности и более высокий уровень параллелизма.
Это механизмы хранения.
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 (помимо простоты использования и хорошей производительности без дополнительных настроек). Для всех операций, где необходимы транзакции, просто придерживайтесь InnoDB. Однако MyISAM действительно может ускорить процесс, когда транзакции не нужны в определенных ситуациях - и требует меньше места на диске и оперативной памяти по сравнению с InnoDB.
Тем не менее, InnoDB все время становится лучше:
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.
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: оптимизация, резервное копирование и репликация» - книга Арьена Ленца, Дерека Дж. Баллинга, Джереми Заводного, Петра Зайцева и Вадима Ткаченко
Когда ваш сервер MySQL выходит из строя, данные могут быть намного проще восстановить из набора таблиц MyISAM, чем из этого большого файла транзакции InnoDB. Каждая таблица MyISAM имеет отдельный файл, и, если во время сбоя в эту таблицу не производилось никаких операций записи, это не повлияет на нее. В случае InnoDB, весь файл транзакции всего сервера MySQL должен быть переиндексирован или что-то еще, что он делает после сбоя. Это может стать довольно запутанным.
InnoDB по умолчанию НЕ myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB является механизмом хранения MySQL по умолчанию. Если вы не настроили другой механизм хранения по умолчанию, выдача Оператор CREATE TABLE без предложения ENGINE = создает таблицу InnoDB "