Spec-Zone.ru › MySQL 5.7

15.2 Двигатель хранилища MyISAM

  • 15.2.1 Параметры запуска MyISAM
  • 15.2.2 Необходимое место для ключей
  • 15.2.3 Форматы хранения таблиц MyISAM
  • 15.2.4 Проблемы с таблицами MyISAM

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

Таблица 15.2 Возможности двигателя хранилища MyISAM

Таблица 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».

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

  • Значения 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/myisam-storage-engine.html

Spec-Zone.ru

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