2013-05-31 2 views
1

Почему замена двигателя MyISAM на MEMORY значительно увеличивает размер таблицы? Я пытаюсь изменить таблицу, содержащую 13 миллионов записей в MEMORY, и у меня 6 ГБ памяти, а в Myisam размер составляет 1,5 ГБ, и я хочу быть вокруг этого размера, используя движок MEMORY, чтобы он соответствовал моему пределу памяти.Почему при переключении на движок MEMORY увеличивается размер таблицы?

Я также определил эту ошибку

{tmp_table_size=5.5G 
max_heap_table_size=5.5G} 

и я все еще получаю «таблица заполнена», так что мое единственное предположение, что при преобразовании в ПАМЯТЬ двигатель размер таблицы должен быть около 10-15GB ,

спасибо

+0

Какова структура этой таблицы? – raina77ow

ответ

1

памяти (или НЕАР) таблица двигатель поддерживает только формат фиксированной строки.

В результате столбец VARCHAR(255) хранится как CHAR(255): он потребляет 255 байт в каждой строке, даже если он содержит только 10 символов, плюс несколько байтов для метаданных (например, для хранения длины). Если столбец находится в UTF-8, он потребляет 3 байта на символ, т. Е. 3 * 255 на строку, плюс метаданные.

См Физические характеристики памяти Таблицы на https://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html:

ПАМЯТЬ таблицы используют формат строк хранения фиксированной длины. Типы переменной длины, такие как VARCHAR, сохраняются с фиксированной длиной.

Смежные вопросы