18.2 Двигатель хранения MyISAM
MyISAM основан на более старом (и больше недоступном) двигателе хранения ISAM, но имеет много полезных расширений.
Таблица 18.2 Функции двигателя хранения MyISAM
| Функция | Поддержка |
|---|---|
| Индексы B-дерева | Да |
| Резервное копирование/восстановление состояния на определённый момент времени (Реализовано в сервере, а не в двигателе хранения.) | Да |
| Поддержка баз данных кластеров | Нет |
| Кластеризованные индексы | Нет |
| Сжатые данные | Да (Сжатые таблицы MyISAM поддерживаются только при использовании сжатого формата строк. Таблицы, использующие сжатый формат строк с MyISAM, доступны только для чтения.) |
| Кэши данных | Нет |
| Зашифрованные данные | Да (Реализовано в сервере через функции шифрования.) |
| Поддержка внешних ключей | Нет |
| Индексы полнотекстового поиска | Да |
| Поддержка геопространственных типов данных | Да |
| Поддержка индексирования геопространственных данных | Да |
| Индексы хеш-таблиц | Нет |
| Кэши индексов | Да |
| Грань блокировки | Таблица |
| MVCC | Нет |
| Поддержка репликации (Реализовано в сервере, а не в двигателе хранения.) | Да |
| Ограничения хранения | 256 ТБ |
| Индексы T-дерева | Нет |
| Транзакции | Нет |
| Обновление статистики для словаря данных | Да |
Каждая таблица MyISAM хранится на диске в двух файлах. Файлы имеют имена, начинающиеся с имени таблицы, и расширение, указывающее тип файла. Файл данных имеет расширение .MYD (MYData). Файл индекса имеет расширение .MYI (MYIndex). Определение таблицы хранится в словаре данных MySQL.
Чтобы явно указать, что вы хотите таблицу MyISAM, укажите это с помощью параметра таблицы ENGINE:
CREATE TABLE t (i INT) ENGINE = MYISAM;
В MySQL 9.2 обычно необходимо использовать ENGINE для указания двигателя хранения MyISAM, поскольку InnoDB является движком по умолчанию.
Вы можете проверить или восстановить таблицы MyISAM с помощью клиента mysqlcheck или утилиты myisamchk. Вы также можете сжать таблицы MyISAM с помощью myisampack, чтобы занять намного меньше места. См. Раздел 6.5.3, «mysqlcheck — Программа обслуживания таблиц», Раздел 6.6.4, «myisamchk — Утилита обслуживания таблиц MyISAM» и Раздел 6.6.6, «myisampack — Генерация сжатых, только для чтения таблиц MyISAM».
В MySQL 9.2 движок хранения MyISAM не поддерживает разбиение. Разбитые таблицы MyISAM, созданные в предыдущих версиях MySQL, не могут быть использованы в MySQL 9.2. Дополнительную информацию см. в Разделе 26.6.2, «Ограничения разбиения, относящиеся к двигателям хранения». Для получения помощи по обновлению таких таблиц для использования в MySQL 9.2 см. Раздел 3.5, «Изменения в MySQL 9.2».
Таблицы MyISAM обладают следующими характеристиками:
-
Все значения данных хранятся с младшим байтом вначале. Это делает данные независимыми от машины и операционной системы. Единственными требованиями для двоичной переносимости являются то, что машина использует целые числа со знаком в дополнении до двух и формат чисел с плавающей точкой IEEE. Эти требования широко используются среди основных машин. Двоичная совместимость может быть неприменима к встроенным системам, которые иногда имеют необычные процессоры.
Нет существенной потери скорости при хранении данных с младшим байтом вначале; байты в строке таблицы обычно не выровнены, и для чтения невыровненного байта в порядке требуется немного больше обработки, чем в обратном порядке. Кроме того, код на сервере, который извлекает значения столбцов, не является критичным по времени по сравнению с другим кодом.
Все числовые значения ключей хранятся с старшим байтом вначале, чтобы улучшить сжатие индексов.
Поддерживаются большие файлы (длиной до 63 бит) в файловых системах и операционных системах, которые поддерживают большие файлы.
В таблице
MyISAMограничение по количеству строк составляет (232)2 (1.844E+19).-
Максимальное количество индексов на таблицу
MyISAMсоставляет 64.Максимальное количество столбцов на индекс составляет 16.
Максимальная длина ключа составляет 1000 байт. Это также можно изменить, изменив исходный код и перекомпилировав его. В случае ключа, длина которого превышает 250 байт, используется больший размер блока ключа, чем стандартный 1024 байта.
Когда строки вставляются в отсортированном порядке (например, при использовании столбца
AUTO_INCREMENT), дерево индекса разбивается таким образом, что узел высокого уровня содержит только один ключ. Это повышает использование пространства в дереве индекса.Внутренняя обработка одного столбца
AUTO_INCREMENTна таблицу поддерживается.MyISAMавтоматически обновляет этот столбец для операцийINSERTиUPDATE. Это ускоряет столбцыAUTO_INCREMENT(по крайней мере, на 10%). Значения в начале последовательности не повторно используются после удаления. (Когда столбецAUTO_INCREMENTопределен как последний столбец индекса с несколькими столбцами, повторное использование значений, удаленных из начала последовательности, происходит.) ЗначениеAUTO_INCREMENTможно сбросить с помощьюALTER TABLEили myisamchk.Строки с динамическим размером фрагментируются намного меньше при смешивании удалений, обновлений и вставок. Это делается путем автоматического объединения смежных удаленных блоков и расширения блоков, если следующий блок удален.
MyISAMподдерживает одновременные вставки: Если в таблице нет свободных блоков посередине файла данных, можноINSERTновые строки в нее одновременно с чтением из таблицы другими потоками. Свободный блок может возникнуть в результате удаления строк или обновления строки динамической длины с большим количеством данных, чем ее текущее содержимое. Когда все свободные блоки исчерпаны (заполнены), будущие вставки снова становятся одновременными. См. Раздел 10.11.3, “Concurrent Inserts”.Можно поместить файл данных и индексный файл в разные каталоги на разных физических устройствах для повышения скорости с помощью опций таблицы
DATA DIRECTORYиINDEX DIRECTORYдляCREATE TABLE. См. Раздел 15.1.21, “CREATE TABLE Statement”.Разрешены значения
NULLв индексированных столбцах. Это занимает от 0 до 1 байта на ключ.Каждый символьный столбец может иметь различные наборы символов. См. Главу 12, Наборы символов, сортировки, Unicode.
В файле индекса
MyISAMесть флаг, указывающий, была ли таблица закрыта корректно. Если mysqld запущен с переменной системыmyisam_recover_options, таблицыMyISAMавтоматически проверяются при открытии и ремонтируются, если таблица не была закрыта должным образом.myisamchk помечает таблицы как проверенные, если вы запустите его с опцией
--update-state. myisamchk --fast проверяет только те таблицы, у которых нет этой метки.myisamchk --analyze хранит статистику для частей ключей, а также для целых ключей.
myisampack может упаковывать
BLOBиVARCHARстолбцы.
MyISAM также поддерживает следующие функции:
Дополнительные ресурсы
Форум, посвященный хранилищу
MyISAM, доступен по адресу https://forums.mysql.com/list.php?21.
© 2025 Oracle
Licensed under the GPLv2 License.