mysql – 向表中添加或删除列是否强制重新创建所有索引?

特别是在
MySQL中(尽管我认为对Oracle和Microsoft SQL Server也是如此).如果我向表添加或删除列,是否需要从头创建所有当前索引(在该表上)?

我想如果我们改变表行大小(通过添加/删除列),那么ROWIDS将改变(非聚集表),从而强制重新创建所有索引.

如果使用聚簇索引(Oracle中的索引组织表),那么我会想象也必须重新创建整个聚簇索引.

如果需要重新创建所有索引,是否有任何优化重建时间的策略?

最佳答案 你没有说什么版本的MySQL和哪个存储引擎.但我怀疑你的问题的答案在这个页面上:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

对您的问题的简短回答是,在添加或删除列时,将重建整个表(所有数据和所有索引).要提高速度,请尝试以下操作:

MyISAM数据:
增加myisam_sort_buffer_size的值

InnoDB的:
增加innodb_buffer_pool_size
增加innodb_log_file_size

无论是存储引擎:
使用列可能的最小列数据类型.

资料来源:我是MySQL认证DBA.

点赞