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 8.4 обычно необходимо использовать ENGINE для указания движка хранения MyISAM, так как InnoDB является движком по умолчанию.
Вы можете проверить или исправить MyISAM таблицы с помощью клиента mysqlcheck или утилиты myisamchk. Вы также можете сжать MyISAM таблицы с помощью myisampack, чтобы занять гораздо меньше места. См. Раздел 6.5.3, «mysqlcheck — Утилита обслуживания таблиц», Раздел 6.6.4, «myisamchk — Утилита обслуживания таблиц MyISAM» и Раздел 6.6.6, «myisampack — Генерация сжатых таблиц MyISAM для только чтения».
В MySQL 8.4 движок хранения MyISAM не поддерживает разбиение. Разбитые MyISAM таблицы, созданные в предыдущих версиях MySQL, не могут использоваться в MySQL 8.4. Для получения дополнительной информации см. Раздел 26.6.2, «Ограничения разбиения, относящиеся к движкам хранения». Для получения помощи по обновлению таких таблиц, чтобы их можно было использовать в MySQL 8.4, см. Раздел 3.5, «Изменения в MySQL 8.4».
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, «Одновременные вставки».Вы можете поместить файл данных и индексный файл в разные каталоги на разных физических устройствах, чтобы получить более высокую скорость с помощью параметров таблицы
DATA DIRECTORYиINDEX DIRECTORYдляCREATE TABLE. См. Раздел 15.1.20, «Заявление CREATE TABLE».Разрешены значения
NULLв индексированных столбцах. Это занимает от 0 до 1 байта на ключ.Каждый символьный столбец может иметь различный набор символов. См. Главу 12, Наборы символов, сортировки, Unicode.
В файле индекса
MyISAMесть флаг, указывающий, была ли таблица закрыта правильно. Если mysqld запускается с переменной системыmyisam_recover_optionsустановленной, таблицыMyISAMавтоматически проверяются при открытии и ремонтируются, если таблица не была закрыта должным образом.myisamchk помечает таблицы как проверенные, если вы запускаете его с опцией
--update-state. myisamchk --fast проверяет только те таблицы, у которых нет этой метки.myisamchk --analyze сохраняет статистику для частей ключей, а также для целых ключей.
myisampack может упаковывать
BLOBиVARCHARстолбцы.
MyISAM также поддерживает следующие функции:
Поддержка истинного типа
VARCHAR; столбецVARCHARначинается с длины, хранящейся в одном или двух байтах.Таблицы с столбцами
VARCHARмогут иметь фиксированную или динамическую длину строки.Сумма длин столбцов
VARCHARиCHARв таблице может составлять до 64 КБ.Ограничения произвольной длины
UNIQUE.
Дополнительные ресурсы
Форум, посвященный хранилищу
MyISAM, доступен по адресу https://forums.mysql.com/list.php?21.
© 2025 Oracle
Licensed under the GPLv2 License.