Mysql的Optimize table命令使用及说明
什么是optimizetable
在MySQL中,optimizetable命令用来重新整理(InnoDB & MyISAM)表格并优化空间利用。
优化后的表更容易被访问,节省了磁盘空间,同时可以加速查询,以达到更好的性能。
手册中的相关描述
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …
- 如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。
- 被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。
- 您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
- 在多数的设置中,您根本不需要运行OPTIMIZE TABLE。
- 即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。
- OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
- 注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。
换句话说:
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也会将表中的数据读取出来,再重新写入,在这个过程中,空洞自然就没有了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
关于Win10下MySQL5.7.17免安装版基本配置教程(图文详解)
这数据库应用是一个应用系统不可或缺的部分,关系型数据库应用大同小异,这里选择MySQL作为数据库平台。下面通过本文给大家介绍关于Win10下MySQL5.7.17免安装版基本配置教程(图文详解),需要的朋友可以参考下2017-06-06
macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16
这篇文章主要为大家详细介绍了macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-01-01
mysql 中 replace into 与 insert into on duplicate key update 的
这篇文章主要介绍了mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点,结合实例形式分析了replace into 与 insert into on duplicate key update的功能、基本用法与操作注意事项,需要的朋友可以参考下2020-02-02


最新评论