为什么将引擎从 MyISAM 更改为 MEMORY 会大大增加表的大小? 我正在尝试将包含 1300 万条记录的表更改为 MEMORY,并且我有 6GB 内存,在 Myisam 中,大小为 1.5GB,我想使用 MEMORY 引擎来控制这个大小,以便它符合我的内存限制。
我也定义了这个
{tmp_table_size=5.5G
max_heap_table_size=5.5G}
而且我仍然收到“表已满”错误,所以我唯一的猜测是,在转换为 MEMORY 引擎时,表大小需要在 10-15GB 左右。
谢谢
最佳答案
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 tables use a fixed-length row-storage format. Variable-length types such as VARCHAR are stored using a fixed length.
关于mysql - 为什么切换到 MEMORY 引擎会增加表的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16861090/