Введение

Движок базы данных

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

Файловая система

Каждая таблица MyISAM хранится на диске в трех файлах (если она не секционирована). Имена файлов начинаются с имени таблицы и имеют расширение, указывающее на тип файла. MySQL использует файл frm для хранения определения таблицы, но этот файл не является частью движка MyISAM; он является частью сервера. Файл данных имеет расширение MYD (MYData). Файл индекса имеет расширение MYI (MYIndex). Если файл индекса потерян, его всегда можно воссоздать, повторно создав индексы. Формат файлов зависит от опции ROW FORMAT таблицы. Доступны следующие форматы:
FIXED: Fixed – это формат, в котором все данные (включая типы переменной длины) имеют фиксированную длину. Этот формат быстрее считывается и упрощает восстановление поврежденных таблиц. Если таблица содержит большие столбцы переменной длины (BLOB или TEXT), она не может использовать формат FIXED. DYNAMIC: Столбцы переменной длины не имеют фиксированного размера. Этот формат немного медленнее считывается, но экономит место на диске. COMPRESSED: Сжатые таблицы можно создать с помощью специального инструмента, когда MySQL не запущен, и они доступны только для чтения. Хотя это обычно делает их непрактичным вариантом, степень сжатия обычно значительно выше, чем у альтернативных методов. Файлы MyISAM не зависят от системы и, поскольку MyISAM не является транзакционным, их содержимое не зависит от текущей нагрузки сервера. Поэтому их можно копировать между разными серверами.

Особенности

MyISAM оптимизирован для сред с интенсивными операциями чтения и небольшим количеством или полным отсутствием операций записи. Типичным сценарием, где предпочтительнее использовать MyISAM, является хранилище данных, поскольку он предполагает выполнение запросов к очень большим таблицам, а обновление таких таблиц происходит, когда база данных не используется (обычно ночью). Причина, по которой MyISAM обеспечивает быструю скорость чтения, заключается в структуре его индексов: каждая запись указывает на запись в файле данных, а указатель представляет собой смещение от начала файла. Это позволяет быстро считывать записи, особенно когда формат является фиксированным, то есть строки имеют постоянную длину. Вставка новых строк также проста, поскольку они добавляются в конец файла данных. Однако операции удаления и обновления более сложны: при удалении необходимо оставлять пустое место, иначе смещения строк изменятся; то же самое относится и к обновлениям, поскольку длина строк может уменьшиться. Если обновление увеличивает длину строки, строка фрагментируется. Для дефрагментации строк и освобождения места необходимо выполнять команду OPTIMIZE TABLE. Благодаря этому простому механизму статистика индексов MyISAM обычно достаточно точна. Однако простота MyISAM имеет и ряд недостатков. Главный недостаток MyISAM – отсутствие поддержки транзакций. Также не поддерживаются внешние ключи. В большинстве случаев использования InnoDB оказывается быстрее, чем MyISAM. Начиная с MySQL 5.5, движок InnoDB используется по умолчанию для обеспечения ссылочной целостности и повышения уровня параллелизма. MyISAM поддерживает полнотекстовое индексирование (FULLTEXT indexing) и типы данных OpenGIS.

Вилки

MariaDB имеет механизм хранения данных под названием Aria, который описывается как "устойчивая к сбоям альтернатива MyISAM". Однако разработчики MariaDB продолжают работу над кодом MyISAM. Основное улучшение – "Сегментированный кэш ключей". При его включении кэш индексов MyISAM разделяется на сегменты. Это повышает конкурентоспособность, поскольку потокам редко требуется блокировать весь кэш. В MariaDB MyISAM также поддерживает виртуальные столбцы. Drizzle не включает MyISAM.