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

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

105 голосов
/ 29 сентября 2010

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

Ответы [ 7 ]

92 голосов
/ 24 марта 2011

InnoDB и MYISAM - механизмы хранения для MySQL.

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

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

36 голосов
/ 29 сентября 2010

Взгляните на

InnoDB и MyISAM

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

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

17 голосов
/ 29 сентября 2010

Это двигатели хранения.

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

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

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

5 голосов
/ 02 ноября 2010

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

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

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

4 голосов
/ 17 февраля 2017

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

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

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

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

1 голос
/ 13 июня 2017

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

0 голосов
/ 21 февраля 2019

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

...