Mysql压缩表空间 Optimize
- 数据库
- 16天前
- 35热度
- 0评论
通过Optimize可以重新组织表的存储结构,去除碎片,从而提高查询性能、减少存储空间占用。
仅InnoDB和MyISAM引擎支持optimize table语句。
1、与delete的区别
delete只会将记录的位置或者数据页标记为"可复用",但是数据库磁盘文件的大小不会改变,即表空间不会被回收。
2、optimize执行过程(原理)
optimize命令的过程包括以下几个关键步骤:
- 创建临时表:MySQL 首先会创建一个与原表结构相同的临时表。
- 复制数据到临时表:将原表中的数据复制到临时表中。
- 优化表:在数据复制的过程中,MySQL 会对数据进行整理和重组,去除碎片,提高数据的连续性。
- 重命名表:当数据复制完成并且表被优化后,MySQL 会删除原表,然后将临时表重命名为原表的名称。
通过这个过程,OPTIMIZE TABLE 可以帮助数据库重新组织表的存储结构,提高查询性能和减少存储空间占用。
也就是说在执行optimize的时候,因为其本质是创建了临时表,所以会生成一个新的ibd文件,在临时表覆盖原表之后,原ibd文件也会被删除。
所以应该注意:
- 可能会暂时锁定表,因此在高并发的系统中使用时需要谨慎。在MySQL5.7和MySQL8.0及以上版本的时候,因为数据库支持online DDL,可以并发执行。所以执行这个语句的时候,会有一小段时间锁表,之后DML语句是可以执行的。
- 对于非常大的表,可能会消耗大量的时间和资源。因为用OPTIMIZE TABLE需要创建一个临时表,所以需要在此之前保证磁盘容量足够。
- 建议操作前进行备份,以防意外的发生。
3、使用方法
sql语句:
OPTIMIZE TABLE table_name;
如果是多张表:
OPTIMIZE TABLE table1, table2, table3;