Spec-Zone.ru › MySQL 8.4

18.2 Движок MyISAM

  • 18.2.1 Параметры запуска MyISAM
  • 18.2.2 Необходимое место для ключей
  • 18.2.3 Форматы хранения таблиц MyISAM
  • 18.2.4 Проблемы с таблицами MyISAM

MyISAM основан на более старом (и больше недоступном) ISAM движке хранения, но имеет много полезных расширений.

Таблица 18.2 Функции движка MyISAM

Таблица 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 таблицы имеют следующие характеристики:

END_OF_DOCUMENT_MARKER
  • Все значения данных хранятся с младшим байтом первым. Это делает данные независимыми от машины и операционной системы. Единственными требованиями к бинарной переносимости являются то, что машина использует двоично-дополнительное представление для целых чисел со знаком и формат чисел с плавающей точкой 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».

  • BLOB и TEXT столбцы могут быть индексированы.

  • Разрешены значения 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/myisam-storage-engine.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API