重建索引 —— 节省空间

数据删除、页分裂等原因,会导致数据页存在空洞,重建索引可以使得页面的利用率更高,空间更紧凑。

开发者 A:我们线上的一个表, 记录日志用的, 会定期删除过早之前的数据. 最后这个表实际内容的大小才 10G, 而他的索引却有 30G. 在阿里云控制面板上看,就是占了 40G 空间. 这可花的是真金白银啊.后来了解到是 InnoDB 这种引擎导致的,虽然删除了表的部分记录,但是它的索引还在, 并未释放.只能是重新建表才能重建索引.

两种索引的重建区别

如果你要重建二级索引 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);

二级索引:当数据删除较多后,重建二级索引是非常合理的,对数据的空间进行节省。

主键索引:重建主键索引需要慎重考虑,无论是删除主键还是创建主键,都会使得整个表进行重建。如果想要重建整个表,直接用 alter table T engine=InnoDB 语句代替。