Mysql库中删除了大量的数据后,您可能会发现数据文件尺寸并无减少。这是由于删除操做后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。若是已经删除了表的一大部分数据,或者若是已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了不少更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化。这个命令能够将表中的空间碎片进行合并,而且能够消除因为删除或者更新形成的空间浪费 。OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起做用 。表优化的工做能够每周或者每个月按期执行,对提升表的访问效率有必定的好处,可是须要注意的是,优化表期间会锁定表,因此必定要安排在空闲时段进行。mysql
mysql> optimize table tb_notice;
当你删除数据 时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺乏,若是一时半 会,没有数据来填补这个空缺,那这样就太浪费资源了。因此对于写比较频烦的表,要按期进行optimizesql
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会锁定表。table