探讨Mysql中OPTIMIZE TABLE的作用详解

 更新时间:2013年06月09日 17:45:38   作者:  
本篇文章是对Mysql中OPTIMIZE TABLE的作用进行了详细的分析介绍,需要的朋友参考下

当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删 除操作后在数据文件中留下碎片所致。Discuz! 在系统数设置界面提供了数据表优化的功能,可以去除删除操作后留下的数据文件碎片,减小文件尺寸,加快未来的读写操作。您只要在做完批量删除,或定期(如 每一两个月)进行一次数据表优化操作即可。

OPTIMIZE TABLE通过制作原来的表的一个临时副本来工作

OPTIMIZE TABLE语法
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表起作用。

对于MyISAM表,OPTIMIZE TABLE按如下方式操作:

1. 如果表已经删除或分解了行,则修复表。
2. 如果未对索引页进行分类,则进行分类。
3. 如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。

对于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上。对于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。请参见13.5.2.1节,“ANALYZE TABLE语法”。

使用—skip-new或—safe-mode选项可以启动mysqld。通过启动mysqld,您可以使OPTIMIZE TABLE对其它表类型起作用。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

OPTIMIZE TABLE语句被写入到二进制日志中,除非使用了自选的NO_WRITE_TO_BINLOG关键词(或其别名LOCAL)。已经这么做了,因此,用于 MySQL服务器的OPTIMIZE TABLE命令的作用相当于一个复制主服务器,在默认情况下,这些命令将被复制到复制从属服务器中。

相关文章

  • 详解MySQL 数据库范式

    详解MySQL 数据库范式

    这篇文章主要介绍了详解MySQL 数据库范式的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-11-11
  • Navicat for MySQL(mysql图形化管理工具)是什么?

    Navicat for MySQL(mysql图形化管理工具)是什么?

    这里就给大家介绍一个常用的MySQL数据库管理工具:Navicat for MySQL,需要的朋友可以参考下
    2015-09-09
  • 完美解决MySQL数据库服务器CPU飙升问题

    完美解决MySQL数据库服务器CPU飙升问题

    这篇文章主要介绍了解决 MySQL 数据库服务器 CPU 飙升的方法,包括定位问题(如使用工具监控、查看慢查询日志)、优化 SQL 查询、调整配置参数、优化数据库架构、检查硬件资源、处理锁竞争问题等,还通过电商业务系统的案例进行了详细分析及给出解决方法,最终优化效果显著
    2025-02-02
  • 使用MySQL的geometry类型处理经纬度距离问题的方法

    使用MySQL的geometry类型处理经纬度距离问题的方法

    这篇文章主要介绍了使用MySQL的geometry类型处理经纬度距离问题的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 详解MySQL的limit用法和分页查询语句的性能分析

    详解MySQL的limit用法和分页查询语句的性能分析

    本篇文章主要介绍了详解MySQL的limit用法和分页查询语句的性能分析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • MYSQL 解锁与锁表介绍

    MYSQL 解锁与锁表介绍

    相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制
    2017-04-04
  • 如何更改MySQL数据库的编码为utf8mb4

    如何更改MySQL数据库的编码为utf8mb4

    utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 这篇文章给大家介绍了更改MySQL数据库的编码为utf8mb4的相关知识,感兴趣的朋友一起看看吧
    2020-02-02
  • MySQL的中文UTF8乱码问题

    MySQL的中文UTF8乱码问题

    MySQL从4.x版本开始支持Unicode,3.x只有latin1编码。刚工作的时候就开始用MySQL了,用的php存取,网页xxx.php是gb2312的编码,存进去的数据用php取出来是中文,用phpMyAdmin执行select、update、dump都是中文,没有乱码问题。
    2010-05-05
  • windows系统mysql5.7.18安装图文教程

    windows系统mysql5.7.18安装图文教程

    这篇文章主要为大家详细介绍了windows系统下mysql5.7.18安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • mysql无法成功启动服务的解决方法(通俗易懂!)

    mysql无法成功启动服务的解决方法(通俗易懂!)

    Mysql是我们使用数据库时需要用到的服务,但是在使用过程中常常遇到服务无法启动的问题,下面这篇文章主要给大家介绍了关于mysql无法成功启动服务的解决方法,需要的朋友可以参考下
    2023-02-02

最新评论