1

为什么将引擎从 MyISAM 更改为 MEMORY 会大大增加表大小?我正在尝试将包含 1300 万条记录的表更改为 MEMORY,并且我有 6GB 内存,而在 Myisam 中,大小为 1.5GB,我希望使用 MEMORY 引擎达到这个大小,因此它符合我的内存限制。

我也定义了这个

{tmp_table_size=5.5G
max_heap_table_size=5.5G}

而且我仍然收到“表已满”错误,所以我唯一的猜测是,当转换为 MEMORY 引擎时,表大小需要在 10-15GB 左右。

谢谢

4

1 回答 1

1

MEMORY(或 HEAP)表引擎仅支持固定行格式。

因此,一VARCHAR(255)列的存储方式类似于CHAR(255):它在每行中占用 255 个字节,即使它只包含 10 个字符,外加几个字节用于元数据(例如用于存储长度)。如果列是 UTF-8 格式,则每个字符占用 3 个字节,即每行 3*255,加上元数据。

请参阅https://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html上的 MEMORY 表的物理特征

MEMORY 表使用固定长度的行存储格式。VARCHAR 等可变长度类型使用固定长度存储。

于 2013-05-31T16:02:17.037 回答