Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Типы таблиц MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Таблицы MyISAM - Программирование от RIN.RU
Таблицы MyISAM



Форматы таблиц MyISAM




В MyISAM поддерживается три различных типа таблиц. Два из них выбираются автоматически, в зависимости от типа используемых столбцов. Третий - сжатые таблицы - может быть создан только при помощи инструмента myisampack.


При использовании с таблицами команд CREATE или ALTER для таблиц, у которых нет форсированной настройки BLOB, можно задать формат DYNAMIC или FIXED с параметром таблицы ROW_FORMAT=#. В будущем можно будет сжимать/разжимать таблицы, указывая ROW_FORMAT=compressed | default для ALTER TABLE. См. раздел Синтаксис оператора CREATE TABLE.


Характеристики статической таблицы (с фиксированной длиной)


Это формат, принятый по умолчанию. Он используется, когда таблица не содержит столбцов VARCHAR, BLOB или TEXT.


Данный формат - самый простой и безопасный, а также наиболее быстрый при работе с дисками. Скорость достигается за счет простоты поиска информации на диске: в таблицах статического формата с индексом для этого достаточно всего лишь умножить номер строки на ее длину.


Кроме того, при сканировании таблицы очень просто считывать постоянное количество записей при каждом чтении с диска.


Если произойдет сбой во время записи в файл MyISAM фиксированного размера, myisamchk в любом случае сможет легко определить, где начинается и заканчивается любая строка. Поэтому обычно удается восстановить все записи, кроме тех, которые были частично перезаписаны. Отметим, что в MySQL все индексы могут быть восстановлены. Свойства статических таблиц следующие:


  • Все столбцы CHAR, NUMERIC и DECIMAL расширены пробелами до ширины столбца;

  • Очень быстрые;

  • Легко кэшируются;

  • Легко восстанавливаются после сбоя, так как записи расположены в фиксированных позициях;

  • Не нуждаются в реорганизации (при помощи myisamchk), кроме случаев, когда удаляется большое количество записей и необходимо вернуть дисковое пространство операционной системе.

  • Для них обычно используется больше дискового пространства, чем для динамических таблиц.




Характеристики динамических таблиц


Данный формат используется для таблиц, которые содержат столбцы VARCHAR, BLOB или TEXT, а также если таблица была создана с параметром ROW_FORMAT=dynamic.


Это несколько более сложный формат, так как у каждой строки есть заголовок, в котором указана ее длина. Одна запись может заканчиваться более чем в одном месте, если она была увеличена во время обновления.


Чтобы произвести дефрагментацию таблицы, можно воспользоваться командами OPTIMIZE table или myisamchk. Если у вас есть статические данные, которые часто считываются/изменяются в некоторых столбцах VARCHAR или BLOB одной и той же таблицы, во избежание фрагментации эти динамические столбцы лучше переместить в другие таблицы. Свойства динамических таблиц следующие:


  • Все столбцы со строками являются динамическими (кроме тех, у которых длина меньше 4).

  • Перед каждой записью помещается битовый массив, показывающий, какие столбцы пусты ('') для строковых столбцов, или ноль для числовых столбцов (это не то же самое, что столбцы, содержащие значение NULL). Если длина строкового столбца равна нулю после удаления пробелов в конце строки, или у числового столбца значение ноль, он отмечается в битовом массиве и не сохраняется на диск. Строки, содержащие значения, сохраняются в виде байта длины и строки содержимого.

  • Обычно такие таблицы занимают намного меньше дискового пространства, чем таблицы с фиксированной длиной.

  • Для всех записей используется ровно столько места, сколько необходимо. Если размер записи увеличивается, она разделяется на несколько частей
    - по мере необходимости. Это приводит к фрагментации записей.

  • Если в строку добавляется информация, превышающая длину строки, строка будет фрагментирована. В этом случае для увеличения производительности
    можно время от времени запускать команду myisamchk -r. Чтобы поучить статистические данные, воспользуйтесь командой myisamchk -ei tbl_name.

  • Восстановление после сбоя для таких таблиц является более сложным процессом, так как запись может быть фрагментированной и состоять из
    нескольких частей, а ссылка (или фрагмент) могут отсутствовать.

  • Предполагаемая длина строки для динамических записей вычисляется следующим образом:


    3
    + (число столбцов+ 7) / 8
    + (число столбцов char)
    + размер числовых столбцов в упакованном виде
    + длина строк
    + (число столбцов NULL + 7) / 8


    На каждую ссылку добавляется по 6 байтов. Динамические записи связываются при каждом увеличении записи во время обновления. Каждая новая ссылка
    занимает по крайней мере 20 байтов, поэтому следующее увеличение может произойти либо по этой же ссылке; либо по другой, если не хватит места.
    Количество ссылок можно проверить при помощи команды myisamchk -ed. Все ссылки можно удалить при помощи команды myisamchk -r.




Характеристики сжатых таблиц


Таблицы этого тип предназначены только для чтения. Они генерируются при помощи дополнительного инструмента myisampack (pack_isam для таблиц ISAM):


  • Все дистрибутивы MySQL, даже выпущенные до предоставления общедоступной лицензии MySQL, могут читать таблицы, которые были сжаты
    при помощи myisampack.

  • Сжатые таблицы занимают очень мало дискового пространства; таким образом при применении данного типа значительно снижается использование дискового пространства. Это полезно при работе с медленными дисками (такими как компакт-диски).

  • Каждая запись сжимается отдельно (незначительные издержки при доступе). Заголовки у записей фиксированные (1-3 байта), в зависимости от самой большой записи в таблице. Все столбцы сжимаются по-разному. Ниже приведено описание некоторых типов сжатия:


    • Обычно для каждого столбца используются разные таблицы Хаффмана.

    • Сжимаются пробелы суффикса.

    • Сжимаются пробелы префикса.

    • Для хранения чисел со значением 0 отводится 1 бит.

    • Если у значений в целочисленном столбце небольшой диапазон, столбец сохраняется с использованием минимального по размерам возможного типа. Например, столбец BIGINT (8 байт) может быть сохранен как столбец TINYINT (1 байт) если все значения находятся в диапазоне от 0 до 255.

    • Если в столбце содержится небольшое множество возможных значений, тип столбца преобразовывается в ENUM.

    • Столбец может содержать сочетание указанных выше сжатий.


  • Для таблиц этого типа возможна обработка записей с фиксированной или динамической длиной.

  • Таблицы данного типа могут быть распакованы при помощи команды myisamchk.




<<<  НазадВперед  >>>
 1  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Таблицы MERGE

Таблицы ISAM

Таблицы BDB или Berkeley_DB

Таблицы HEAP

Таблицы InnoDB

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь