7 Типы таблиц MySQL | Оглавление | 7.1.1 Пространство, необходимое для ключей |
Тип таблиц MyISAM
принят по умолчанию в MySQL версии 3.23. Он основывается
на коде ISAM
и обладает в сравнении с ним большим количеством полезных
дополнений.
Индекс хранится в файле с расширением `.MYI' (MYIndex), а данные - в файле
с расширением `.MYD' (MYData). Таблицы MyISAM
можно
проверять/восстанавливать при помощи утилиты myisamchk
. See section 4.4.6.7 Использование myisamchk для послеаварийного восстановления. Таблицы MyISAM
можно сжимать при помощи
команды myisampack
, после чего они будут занимать намного меньше места.
See section 4.7.4 myisampack
, MySQL-генератор сжатых таблиц (только для чтения).
Новшества, которыми обладает тип MyISAM
:
MyISAM
, указывающий, правильно была закрыта таблица или
нет. В случае запуска mysqld
с параметром --myisam-recover
таблицы
MyISAM
будут автоматически проверяться и/или восстанавливаться при
открытии, если таблица была закрыта неправильно.
INSERT
можно вставлять новые строки в таблицу, в
середине файла данных которой нет свободных блоков, в то время как
другие потоки считывают из таблицы информацию (совмещенная вставка).
Свободный блок может быть получен при обновлении строки с динамической
длиной, когда большее количество данных заменяется меньшим количеством
или при удалении строк. Когда свободных блоков не остается, все
последующие блоки снова будут вставляться как совмещенные.
AUTO_INCREMENT
. MyISAM
автоматически
обновляет его при выполнении команд INSERT
/UPDATE
. Значение
AUTO_INCREMENT
может быть обнулено оператором myisamchk
. После этого
столбец AUTO_INCREMENT
будет быстрее (по крайней мере на 10%) и старые
номера не будут повторно использоваться, как со старым ISAM
. Обратите
внимание: когда AUTO_INCREMENT
задан в конце составного ключа, старое
поведение все еще сохраняется.
AUTO_INCREMENT
) дерево ключей будет разделено таким образом, чтобы
верхний узел содержал только один ключ. При этом сокращается расход
пространства памяти в дереве ключей.
BLOB
и TEXT
могут быть проиндексированы.
NULL
. Они занимают 0-1 байта
на ключ.
myisamchk
.
myisamchk
будет отмечать таблицы как проверенные, если они запускаются
с параметром --update-state
. myisamchk --fast
будет проверять только
те таблицы, в которых отсутствует данная пометка.
myisamchk -a
сохраняет статистические данные по частям ключа (не
только для ключей целиком, как в ISAM
).
myisampack
может упаковывать столбцы BLOB
и VARCHAR
.
DATA/INDEX DIRECTORY="path"
для
CREATE TABLE
). See section 6.5.3 Синтаксис оператора CREATE TABLE
.
MyISAM
также поддерживает следующие функции, которые можно будет
использовать в MySQL в ближайшем будущем:
VARCHAR
; столбец VARCHAR
начинается с длины, которая
хранится в 2 байтах.
VARCHAR
могут иметь фиксированную или динамическую длину
записей.
VARCHAR
и CHAR
могут быть до 64 Кб длиной. У всех ключевых сегментов
есть свои собственные определения языка. Это позволяет задавать в
MySQL различные определения языка для каждого столбца.
UNIQUE
может использоваться вычисленный хэш-индекс. Это позволяет
использовать UNIQUE
с любым сочетанием столбцов в таблице (тем не
менее, нельзя производить поиск по вычисленному UNIQUE
индексу).
Обратите внимание, что индексные файлы при использовании MyISAM
обычно
намного меньше в сравнении с ISAM
. Это означает, что для MyISAM
обычно
задействуется меньше системных ресурсов, чем для ISAM
, но больше
загружается процессор при вставке данных в сжатый индекс.
Приведенные ниже параметры mysqld
могут использоваться для изменения
поведения таблиц MyISAM
. See section 4.5.6.4 SHOW VARIABLES
.
Параметр | Описание |
--myisam-recover=# | Автоматическое восстановление таблиц после сбоя. |
-O myisam_sort_buffer_size=# | При восстановлении таблиц используется буфер. |
--delay-key-write-for-all-tables | Не сбрасывать на диск ключевые буферы между записями для любых таблиц MyISAM
|
-O myisam_max_extra_sort_file_size=# | Используется, чтобы помочь MySQL выбрать, когда использовать медленный, но надежный метод создания индекса кэша ключей. Обратите внимание на то, что этот параметр задается в мегабайтах! |
-O myisam_max_sort_file_size=# | Не использовать метод быстрой сортировки индекса для созданных индексов, если временный файл превысит этот размер. Обратите внимание на то, что этот параметр задается в мегабайтах! |
-O myisam_bulk_insert_tree_size=# Размер кэша дерева, используемого при оптимизации групповых вставок. Обратите внимание: это ограничение на поток!
|
Автоматическое восстановление активизируется при запуске mysqld
с
параметром --myisam-recover=#
(see section 4.1.1 Параметры командной строки mysqld
).
Когда таблица открывается, производится проверка, не помечена ли она как
сбойная, не равна ли переменная счетчика открытий таблицы нулю (0) и не
производится ли запуск с параметром --skip-locking
. Если хотя бы одно из
этих условий выполняется, произойдет следующее:
Если не удается восстановить все строки из предыдущего выполненного
оператора, и не был указан параметр FORCE
для myisam-recover
,
автоматическое восстановление будет отменено со следующей ошибкой в файле
ошибок:
Error: Couldn't repair table: test.g00pages
Если в этом случае был указан параметр FORCE
, вместо вышеуказанного
сообщения в файле ошибок будет присутствовать следующее предупреждение:
Warning: Found 344 of 354 rows when repairing ./test/g00pages
Обратите внимание: если запустить автоматическое восстановление с
параметром BACKUP
, необходимо установить скрипт cron, который
автоматически перемещает файлы с именами `tablename-datetime.BAK' из
каталогов базы данных на носитель резервного копирования.
See section 4.1.1 Параметры командной строки mysqld
.
7 Типы таблиц MySQL | Оглавление | 7.1.1 Пространство, необходимое для ключей |