0

有人可以解释为什么向包含大量数据的 innodb 紧凑表添加列会很慢吗?

4

2 回答 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 回答