Buy this Reference Manual in softcover from Barnes & Noble!
Тип таблиц 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
.
Posted by on Thursday September 12 2002, @2:18am | [Delete] [Edit] |
I'd like to understand why the storing of the data is a
machine and OS independent. I know that Intel
Machines stores data in RAM with the high byte first
viceversa Motorola Machines stores data with the
low one. Andrea
Posted by Byoung-In Han on Sunday December 1 2002, @7:03pm | [Delete] [Edit] |
Maximum key length is 500 bytes by default (can be
changed by recompiling). In cases of keys longer
than 250 bytes, a bigger key block size than the
default of 1024 bytes is used for this key.
how can i recompile to enlarge maximum key
length???
i want to create table like this...
create table test( field1 text not null,primary key
(field1(1024)) )
that is, i want primary key length to be more than
1024...
answer me... plz...ASAP
Posted by PRASANTH PISKA on Monday January 20 2003, @9:52pm | [Delete] [Edit] |
i think the documentation for this section should contain an overview on MyISAM tables which can give better idea of their usage. something similar to InnoDB tables overview
Add your own comment.