摘自丁奇mysql实战45讲
create table T(
id int primary key,
k int not null,
name varchar(16),
index(k)
)engine=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;
来代替。