Mysql的Optimize table命令使用及说明

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

什么是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也会将表中的数据读取出来,再重新写入,在这个过程中,空洞自然就没有了

总结

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

相关文章

  • 解决MySQL5.7安装后没有data文件夹无法登录的问题

    解决MySQL5.7安装后没有data文件夹无法登录的问题

    这篇文章主要介绍了解决MySQL5.7安装后没有data文件夹无法登录的问题,需要的朋友可以参考下
    2016-04-04
  • MySQL索引底层数据结构详情

    MySQL索引底层数据结构详情

    这篇文章主要介绍了MySQL索引底层数据结构详情,下面文章围绕MySQL索引底层数据结构的相关资料展开全篇文章,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • Mysql索引详细介绍

    Mysql索引详细介绍

    这篇文章主要介绍了Mysql索引详细介绍,本文讲解了Mysql索引简介、设计索引的原则、如何使用索引等内容,需要的朋友可以参考下
    2014-07-07
  • 关于Win10下MySQL5.7.17免安装版基本配置教程(图文详解)

    关于Win10下MySQL5.7.17免安装版基本配置教程(图文详解)

    这数据库应用是一个应用系统不可或缺的部分,关系型数据库应用大同小异,这里选择MySQL作为数据库平台。下面通过本文给大家介绍关于Win10下MySQL5.7.17免安装版基本配置教程(图文详解),需要的朋友可以参考下
    2017-06-06
  • Mysql实验之使用explain分析索引的走向

    Mysql实验之使用explain分析索引的走向

    索引是mysql的必须要掌握的技能,同时也是提供mysql查询效率的手段。通过以下的一个实验可以理解?mysql的索引规则,同时也可以不断的来优化sql语句
    2018-01-01
  • MySQL磁盘坏块处理的全流程

    MySQL磁盘坏块处理的全流程

    当 MySQL 所在磁盘出现坏块(Bad Sector),可能导致数据库实例异常重启、表损坏、数据无法读取或写入等严重问题,此类问题不仅涉及 MySQL 层处理,还需配合操作系统和硬件层面进行综合判断与修复,所以本文给大家介绍了MySQL磁盘坏块处理的全流程
    2025-07-07
  • 几道MySQL的精选大厂面试题及回答(被提问的几率很高!)

    几道MySQL的精选大厂面试题及回答(被提问的几率很高!)

    金三银四是面试求职高峰期,最近有很多网友都在求大厂面试题,发出来分享给大家,这篇文章主要介绍了几道MySQL的精选大厂面试题及回答,这些题被提问的几率很高,需要的朋友可以参考下
    2026-04-04
  • macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16

    macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16

    这篇文章主要为大家详细介绍了macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • mysql中将null值转换为0的语句

    mysql中将null值转换为0的语句

    mysql中将null值转换为0的语句,在mysql数据库开发中,如果后期添加了字段那么这些值为空值null,我们在使用者需要将null转换为0方便后期的控制就需要下面的代码了。
    2011-02-02
  • mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点实例分析

    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

最新评论