Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > Mysql的Optimize table命令

Mysql的Optimize table命令使用及说明

作者:Pisces_224

在MySQL中,optimizetable命令用来重新整理(InnoDB&MyISAM)表格并优化空间利用,它有助于提高查询速度和性能,此操作应谨慎使用,通常只需每月或视情况执行,对于频繁写入的表,定期优化是必要的,执行时需注意备份数据及避免影响在线服务

什么是optimizetable

在MySQL中,optimizetable命令用来重新整理(InnoDB & MyISAM)表格并优化空间利用。

优化后的表更容易被访问,节省了磁盘空间,同时可以加速查询,以达到更好的性能。

手册中的相关描述

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …

换句话说:

MySQL数据库的表格在不停的操作时间内产生的page分布是不均匀的,这就导致有的页变满就不能继续插入了,导致了表的碎片化以及空间的浪费。

在进行大量数据的插入和删除时,会进一步加剧这种现象,使表格的性能下降。

通俗理解

当你删除数据时,mysql并不会回收被已删除数据的占据的存储空间以及索引位。而是空在那里,等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。

所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。

这时,就需要使用optimizetable重新压缩表格来回收空间和达到优化性能。

使用

mysql里输入以下命令:

OPTIMIZE TABLE table_name;

优化多个表:

OPTIMIZE TABLE [table1],[table2],......[tablen]; 

注意点

① 优化表格之前,最好备份一下表格的数据。如果数据非常庞大,优化时间可能需要很长时间。

② 在OPTIMIZE TABLE运行过程中,MySQL会锁定表。如果涉及海量的数据表,应该考虑使用一些运维手段避免现网的服务受到影响。

③ 使用alter table table_name engine=innodb 命令也可以同样达到释放空洞的效果。这是由于在转换数据引擎(即便没有真正转换)的时候,mysql也会将表中的数据读取出来,再重新写入,在这个过程中,空洞自然就没有了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文