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

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

Ответ 1

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

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

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

Ответ 2

Посмотрите

InnoDB и MyISAM

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Уровень изоляции по умолчанию og mysql InnoDB - "Read Repeatable". Для MyISAM транзакций нет. InnoDB использует блокировку на уровне строк, в то время как MyISAM может использовать только блокировку уровня таблицы, поэтому InnoDB имеет восстановление сбоев лучше, чем MyISAM. Для того, чтобы избежать эффектов concurrency, нужно вручную получить блокировку уровня таблицы вручную в MyISAM.

Ответ 6

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

Ответ 7

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

Ответ 8

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: оптимизация, резервное копирование и репликация" - книга Арьена Ленца, Дерека Дж. Баллинга, Джереми Заводного, Питера Зайцева и Вадима Ткаченко