为什么mysql改变表总是复制到临时表?

时间:2014-02-26 11:37:20

标签: mysql performance memory innodb

我在mysql中有innodb表,记录少于200万,数据+索引大小约为1.5 GB 我需要做alter table来向表中添加一行。每当我做alter table mysql总是做复制到temptable。 数据库机器有100 GB的RAM,所以我希望alter table应该在内存中执行。 我已经设定了:

tmp_table_size = 10G
max_heap_table_size = 10G
sort_buffer_size = 10G
innodb_buffer_pool_size=50G

但这没有帮助。如何配置mysql以避免复制到temptable?

1 个答案:

答案 0 :(得分:2)

在任何情况下,MySQL都不会在内存中执行ALTER TABLE。向表中添加新列需要创建一个新表(使用新模式),将旧表中的所有行复制到新表,并自动交换旧表和新表。根据MySQL版本,某些类型的ALTER TABLE,例如添加新索引,可能可以完成" online"操作期间未阻止其他操作的地方。然而,这仍然是在磁盘上完成的#34;关于你的问题。