MyISAM был механизмом хранения по умолчанию для версий системы управления реляционными базами данных MySQL до 5.5, выпущенных в декабре 2009 года. Он основан на более старом коде ISAM, но имеет множество полезных расширений.
Каждая таблица MyISAM хранится на диске в трех файлах (если он не разбит на разделы). Файлы имеют имена, которые начинаются с имени таблицы и имеют расширение, указывающее тип файла. MySQL использует файл.frm для хранения определения таблицы, но этот файл не является частью механизма MyISAM; вместо этого это часть сервера. Файл данных имеет расширение.MYD (MYData). Индексный файл имеет расширение.MYI (MYIndex). Индексный файл, если он утерян, всегда можно воссоздать, воссоздав индексы.
Формат файлов зависит от параметра таблицы ROW_FORMAT. Доступны следующие форматы:
Файлы MyISAM не зависят от системы, и, поскольку MyISAM не является транзакционным, их содержимое не зависит от текущей рабочей нагрузки сервера. Поэтому их можно копировать между разными серверами.
MyISAM оптимизирован для сред с интенсивными операциями чтения и небольшим количеством операций записи или вообще без них. Типичной областью, в которой можно было бы предпочесть MyISAM, является хранилище данных, поскольку оно включает запросы к очень большим таблицам, и обновление таких таблиц выполняется, когда база данных не используется (обычно ночью).
Причина, по которой MyISAM допускает быстрое чтение, - это структура его индексов: каждая запись указывает на запись в файле данных, а указатель смещен от начала файла. Таким образом, записи могут быть быстро прочитаны, особенно если формат ФИКСИРОВАН. Таким образом, строки имеют постоянную длину. Вставки тоже просты, потому что новые строки добавляются в конец файла данных. Однако операции удаления и обновления более проблематичны: при удалении должно оставаться пустое место, иначе смещения строк могут измениться; то же самое касается обновлений, поскольку длина строк становится короче; если обновление делает строку длиннее, строка фрагментируется. Чтобы дефрагментировать строки и потребовать пустое пространство, необходимо выполнить команду OPTIMIZE TABLE. Благодаря этому простому механизму статистика индекса MyISAM обычно довольно точна.
Однако простота MyISAM имеет несколько недостатков. Главный недостаток MyISAM - отсутствие поддержки транзакций. Также не поддерживаются внешние ключи. В обычных случаях использования InnoDB кажется быстрее, чем MyISAM.
Версии MySQL 5.5 и выше перешли на механизм InnoDB, чтобы гарантировать ограничения ссылочной целостности и более высокий уровень параллелизма.
MyISAM поддерживает индексирование FULLTEXT и типы данных OpenGIS.
MariaDB имеет механизм хранения под названием Aria, который описывается как «безопасная альтернатива MyISAM». Однако разработчики MariaDB все еще работают над кодом MyISAM. Основное улучшение - «Сегментированный ключевой кэш». Если он включен, кеш индексов MyISAM делится на сегменты. Это улучшает параллелизм, поскольку потокам редко требуется блокировать весь кеш.
В MariaDB MyISAM также поддерживает виртуальные столбцы.
Дождь не включает MyISAM.