在mysql中对比较大的业务表进行删除,这样容易产生比较多的存储碎片,导致存储空间无法充分利用,回收闲置的数据库空间,把分散存储的数据和索引重新挪到一起(defragmentation),对I/O速度有好处。
以我司的实际表为例:对历史数据(表:tf_test)删除之后(delete操作),查看tf_test.ibd文件大小是6.2G;也可以用以下SQL查询,但是查询的结果没有直接查看文件大小准确
select concat(round(sum(data_length/1024/1024),2),'MB') from information_schema.TABLES where TABLE_NAME='tf_test';
执行重建命令之后:
alter table tf_test engine=InnoDB;
查看tf_test.ibd文件大小是1.5G,释放了4.7G空间。
也可以用这个命令进行重建
optimize table tf_test;