特别是在MySQL中(尽管我认为对于Oracle和Microsoft SQL Server也是如此)。如果我向表添加或删除列,是否需要从头创建所有当前索引(在该表上)?
我想如果我们要更改表行大小(通过添加/删除列),那么ROWIDS将更改(非群集表),从而强制重新创建所有索引。
如果使用聚簇索引(Oracle中的索引组织表),那么我会想象也必须重新创建整个聚簇索引。
如果需要重新创建所有索引,是否有任何优化重建时间的策略?
答案 0 :(得分:2)
你没有说什么版本的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认证。