• 问题

InnoDB 表 T,如果你要重建索引 k,你的两个 SQL 语句可以这么写: alter table T drop index k; alter table T add index(k); 如果你要重建主键索引,也可以这么写: alter table T drop primary key; alter table T add primary key(id); 问题:对于上面这两个重建索引的作法,说出你的理解。如果有不合适的,为什么,更好的方法是什么?

  • 分析

如果删除,新建主键索引,会同时去修改普通索引对应的主键索引,性能消耗比较大。 删除重建普通索引貌似影响不大,不过要注意在业务低谷期操作,避免影响业务。

  • 参考答案

重建索引 k 的做法是合理的,可以达到省空间的目的。但是,重建主键的过程不合理。不论是删除主键还是创建主键,都会将整个表重建。所以连着执行这两个语句的话,第一个语句就白做了。这两个语句,你可以用这个语句代替 : alter table T engine=InnoDB