RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

7.3 Таблицы ISAM

Вы можете использовать старый тип таблиц ISAM. Он исчезнет довольно скоро потому, что MyISAM лучшая реализация той же самой вещи. ISAM использует индексB-tree. Индекс сохранен в файле с расширением .ISM, а данные сохранены в файле с расширением .ISD. Вы можете проверять/ремонтировать ISAM-таблицы с помощью команды isamchk. Подробности в разделе 4.4.6.7 Использование myisamchk для ремонта.

ISAM имеет следующие особенности и свойства:

  • Ключи фиксированной длины и сжатые.
  • Записи фиксированной и переменной длины (динамические).
  • 16 ключей с 16 частями ключа
  • Максимальная длина ключа 256 (по умолчанию)
  • Данные сохранены в машинном формате. Это быстро, но зависит от OS и используемого процессора.

Большинство из того, что сказано про таблицы MyISAM, верно и для таблиц ISAM. Подробности в разделе "7.1 Таблицы MyISAM". Главные отличия от таблиц типа MyISAM:

  • ISAM-таблицы не переносимы между разными OS и платформами.
  • Нельзя обрабатывать таблицы > 4G.
  • Поддерживается только префиксное сжатие строк.
  • Меньшие ограничения ключа.
  • Динамические таблицы становятся более фрагментированными.
  • Таблицы сжимаются pack_isam вместо myisampack.

Если Вы хотите преобразовывать ISAM-таблицу в MyISAM-таблицу так, чтобы Вы могли использовать утилиты, типа mysqlcheck, используйте команду ALTER TABLE:

mysql> ALTER TABLE tbl_name TYPE = MYISAM;

7.4 Таблицы HEAP

Таблицы HEAP используют хэшированный индекс и хранятся в памяти. Это делает их очень быстрыми, но если MySQL рухнет, Вы потеряете все данные, сохраненные в них. HEAP очень полезны для создания временных таблиц в памяти!

Внутренние таблицы MySQL HEAP используют 100% динамическое хеширование без областей переполнения. Не требуется никакого дополнительного пространства, необходимого для свободных списков. Таблицы HEAP также не имеют проблем с удалением+вставкой:

mysql> CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) as down
                  FROM log_table GROUP BY ip;
mysql> SELECT COUNT(ip),AVG(down) FROM test;
mysql> DROP TABLE test;

Имеются некоторые вещи, которые надлежит учитывать, когда Вы используете таблицы HEAP:

  • Вы должны всегда использовать определение MAX_ROWS в инструкции CREATE, чтобы гарантировать, что Вы случайно не используете всю память.
  • Индексы будут использоваться только с = и <=> (но зато ОЧЕНЬ быстро!).
  • Таблицы HEAP могут использовать только целые ключи, чтобы искать строку. Сравните это с таблицами MyISAM, где любой префикс ключа может использоваться, чтобы найти строки.
  • Таблицы HEAP используют фиксированный формат длины записи.
  • Таблицы HEAP не поддерживают столбцы BLOB и TEXT.
  • Таблицы HEAP не поддерживают AUTO_INCREMENT.
  • Таблицы HEAP не поддерживают индекс на столбце NULL.
  • Вы можете иметь неуникальные ключи в таблице HEAP.
  • Таблицы HEAP разделены между всей клиентурой (точно так же, как и любая другая таблица).
  • Вы не можете искать следующую запись (то есть использовать индекс, чтобы делать вызов ORDER BY).
  • Данные для таблиц HEAP распределены в маленьких блоках. Таблицы на 100% динамические (при вставке). Никаких областей переполнения и никакого дополнительного места ключа не надо. Удаленные строки помещаются в связанный список и используются, когда Вы вставляете новые данные в таблицу.
  • Вам надо иметь достаточно памяти для всех таблиц HEAP, которые Вы хотите использовать в то же самое время.
  • Чтобы освободить память, Вы должны выполнить DELETE FROM heap_table, TRUNCATE heap_table или DROP TABLE heap_table.
  • MySQL не может выяснять приблизительно сколько строк имеется между двумя значениями (это используется оптимизатором диапазона, чтобы решить, как лучше индексировать). Это может воздействовать на некоторые запросы, если Вы изменяете таблицу MyISAM на таблицу HEAP.
  • Чтобы гарантировать, что Вы случайно не делаете что-нибудь в корне ошибочное, Вы не можете создавать таблицы типа HEAP больше, чем max_heap_table_size.

Память, необходимая для одной строки в таблице HEAP:

SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2) +
ALIGN(length_of_row+1, sizeof(char*))

sizeof(char*) является 4 на 32-разрядных машинах и 8 на 64-разрядных системах.

Поиск

 

Найди своих коллег!