15.2 Двигатель хранилища MyISAM
MyISAM основан на более старом (и больше недоступном) ISAM движке хранилища, но имеет множество полезных расширений.
Таблица 15.2 Возможности двигателя хранилища MyISAM
| Функция | Поддержка |
|---|---|
| Индексы B-дерева | Да |
| Резервное копирование/восстановление в определённый момент времени (Реализовано в сервере, а не в движке хранилища.) | Да |
| Поддержка баз данных кластеров | Нет |
| Кластеризованные индексы | Нет |
| Сжатые данные | Да (Сжатые таблицы MyISAM поддерживаются только при использовании сжатого формата строк. Таблицы, использующие сжатый формат строк с MyISAM, доступны только для чтения.) |
| Кэши данных | Нет |
| Зашифрованные данные | Да (Реализовано в сервере через функции шифрования.) |
| Поддержка внешних ключей | Нет |
| Индексы полнотекстового поиска | Да |
| Поддержка геопространственных типов данных | Да |
| Поддержка геопространственного индексирования | Да |
| Индексы хеш-таблицы | Нет |
| Кэши индексов | Да |
| Грань блокировки | Таблица |
| MVCC | Нет |
| Поддержка репликации (Реализовано в сервере, а не в движке хранилища.) | Да |
| Ограничения хранилища | 256 ТБ |
| Индексы T-дерева | Нет |
| Транзакции | Нет |
| Обновление статистики словаря данных | Да |
Каждая MyISAM таблица хранится на диске в трёх файлах. Файлы имеют имена, начинающиеся с имени таблицы, и расширение, указывающее тип файла. Файл формата таблицы имеет расширение .MYD (MYData). Файл индекса имеет расширение .MYI (MYIndex).
Чтобы явно указать, что вы хотите таблицу MyISAM, укажите это с помощью опции таблицы ENGINE:
CREATE TABLE t (i INT) ENGINE = MYISAM;
В MySQL 5.7 обычно необходимо использовать ENGINE для указания двигателя хранилища MyISAM, потому что InnoDB является движком по умолчанию.
Вы можете проверить или восстановить MyISAM таблицы с помощью клиента mysqlcheck или утилиты myisamchk. Вы также можете сжать MyISAM таблицы с помощью myisampack, чтобы значительно сократить занимаемое пространство. См. Раздел 4.5.3, «mysqlcheck — Программа обслуживания таблиц», Раздел 4.6.3, «myisamchk — Утилита обслуживания таблиц MyISAM» и Раздел 4.6.5, «myisampack — Создание сжатых, только для чтения таблиц MyISAM».
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новые строки в неё в то же время, когда другие потоки считывают данные из таблицы. Свободный блок может появиться в результате удаления строк или обновления строки с динамической длиной с большим количеством данных, чем её текущее содержимое. Когда все свободные блоки исчерпаны (заполнены), будущие вставки вновь становятся одновременными. См. Раздел 8.11.3, «Одновременные вставки».Вы можете разместить файл данных и файл индекса в разных каталогах на разных физических устройствах, чтобы ускорить работу с опциями таблицы
DATA DIRECTORYиINDEX DIRECTORYдляCREATE TABLE. См. Раздел 13.1.18, «CREATE TABLE Statement».Значения
NULLразрешены в индексированных столбцах. Это занимает от 0 до 1 байта на ключ.Каждый столбец символов может иметь различный набор символов. См. Главу 10, Наборы символов, сортировки, 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.