有人可以解释为什么向包含大量数据的 innodb 紧凑表添加列会很慢吗?
问问题
298 次
2 回答
1
使用ALTER TABLE
向表中添加列需要重建整个表,这对于大表来说很慢。
如果您想在运行时继续使用该表ALTER
,您应该考虑使用 pt-online-schema-change 工具:
http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html
于 2012-04-20T19:45:21.620 回答
0
从紧凑表的 mysql 文档中,它指出每条记录的标题都有一个位,指示该字段是否为空。如果添加列,则必须更改该标题的大小,这至少会更改该表中所有行的大小。
摘录:使用 COMPACT 行格式的 InnoDB 表中的行具有以下特征:
每个索引记录都包含一个五字节的标头,其前面可能是一个可变长度的标头。标头用于将连续记录链接在一起,也用于行级锁定。
记录头的可变长度部分包含一个位向量,用于指示 NULL 列。如果索引中可以为NULL的列数为N,则位向量占用CEILING(N/8)个字节。(例如,如果有 9 到 15 列可以为 NULL,则位向量使用两个字节。)
于 2012-04-23T12:46:36.293 回答