特别是在MySQL中(尽管我假设甲骨文和Microsoft SQL Server也是如此)。如果我向表中添加或删除一列,是否需要从头开始创建(该表上的)所有当前索引?
我可以想象,如果我们改变表行大小(通过添加/删除列),那么ROWIDS将改变(非聚集表),从而强制重新创建所有索引。
如果使用聚集索引(Oracle中的索引组织表),那么我想整个聚集索引也必须重新创建。
如果需要重新创建所有索引,是否有优化重建时间的策略?
发布于 2012-01-14 07:33:21
你没有说哪个版本的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数据库管理员。
https://stackoverflow.com/questions/8854278
复制相似问题