探讨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中OPTIMIZE TABLE的作用详解_MySQL
-
探讨Mysql中OPTIMIZE TABLE的作用详解_MySQL
-
详解mysql中的静态变量的作用
-
详解记录MySQL中lower_case_table_names的坑
-
详解 Mysql中的delimiter定义及作用
-
Mysql中的table engine及各种engine的区别和作用讲解
-
HTML中table标签的thead、tbody、tfoot的作用详解
-
详解mysql中的静态变量的作用
-
Mysql中的table engine及各种engine的区别和作用讲解
-
详解记录MySQL中lower_case_table_names的坑