Типы таблиц в MySQL

В MySQL возможно применять несколько типов таблиц:

  • MyISAM;
  • InnoDB;
  • MERGE;
  • ARCHIVE;
  • CSV;
  • FEDERATED;
  • EXAMPLE;
  • MEMORY (HEAP);
  • BLACKHOLE;
  • IBMDB2I.

Чтоб узнать какие типы таблиц поддерживаются в MySQL нужно выполнить запрос:

show engines

MyISAM

Тип таблиц MyISAM применяется в MySQL по умолчанию.

Пример создания таблицы типа MyISAM:

CREATE TABLE isamTable
( isam_ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
isam_Name CHAR(100)) ENGINE = MyISAM;

т.к. MyISAM применяется по умолчанию, то ENGINE = MyISAM можно было опустить, но делать так не рекомендуется, ведь могут измениться правила и по умолчанию будут использовать иной тип таблиц.

Получаем в каталоге базы данных: MyISAM

Создав таблицу типа MyISAM, мы получили три файла. Первый файл isamtable.frm содержит информацию о структуре таблицы. Файл isamtable.MYD (MYData) хранит данные таблицы, сейчас в таблице нет данных. Третий файл isamtable.MYI (MYIndex) хранит индексы таблицы.

Таблицы типа MyISAM не поддерживают транзакции,. Блокировка осуществляется на уровне таблицы, а не строки, т.е. когда строка изменяется (update) или новая строка вставляется (insert) блокируется вся таблица до завершения данной операции. Нет поддержки внешних ключей. Колонка с AUTO_INCREMENT может быть только одна.

Допускается null в индексированной колонке. Возможно использование разных кодировок в колонках одной таблицы. В индексном файле имеется флаг, фиксирующий правильно ли была закрыта таблица, если нет, то при следующем открытии таблицы сервер будет её восстанавливать.

MyISAM хорошо работает с запросами select. MyISAM работает быстро и потребляет мало системных ресурсов.

Наверх

InnoDB

Пример создания таблицы типа InnoDB:

CREATE TABLE innoTable
( inno_ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
inno_Name CHAR(100)) ENGINE = InnoDB;

Получаем: InnoDB

Создан файл innotable.frm, в котором содержится информация о структуре таблицы. Данные таблиц такого типа храняться общих файлах, а не каждая таблица в отдельном файле, как это делается для MyISAM.

Таблицы типа InnoDB поддерживают транзакции. Можно использовать внешние ключи. Блокировка осуществляется на уровне строки, а не таблицы, как это делается для MyISAM.

Таблицы InnoDB имеют высокую производительность. Операции вставки (insert) и обновления (update) выполняются с большой скоростью. У типа InnoDB нет ограничений на размер таблицы. В случае сбоя в работе таблица InnoDB воостановится автоматически. Select работает быстрее в MyISAM, чем в InnoDB.

ARCHIVE

Тип таблиц ARCHIVE применяется для хранения в сжатом виде больших объемов данных без индексов. Нет предела на объём хранимой информации. Внешние ключи не поддерживаются. Транзакции не поддерживаются. Блокировка на уровне строки.