为什么将引擎从MyISAM更改为MEMORY会增加表格大小? 我正在尝试将包含1300万条记录的表格更改为MEMORY,并且我有6GB内存,而在Myisam中,大小为1.5GB,我希望使用MEMORY引擎大约这个大小,以便它符合我的内存限制。
我也定义了这个
{tmp_table_size=5.5G
max_heap_table_size=5.5G}
我仍然得到“表已满”错误,所以我唯一的猜测是,当转换为MEMORY引擎时,表大小需要大约10-15GB。
谢谢
答案 0 :(得分: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的可变长度类型使用固定长度存储。