学习使用OPTIMIZE优化mysql表

发布时间:2020-08-23编辑:脚本学堂
mysql中的OPTIMIZE:REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表 myisamchk table.MYI 修复索引

学习使用OPTIMIZE优化mysql表,有需要的朋友可以看看。

mysql中的OPTIMIZE:
REPAIR TABLE `table_name` 修复表
OPTIMIZE TABLE `table_name` 优化表
myisamchk table.MYI 修复索引

 
REPAIR TABLE 用于修复被破坏的表。
myisamchk TABLE.MYI 用于修复被破坏的索引文件。
PTIMIZE TABLE 用于回收闲置的数据库空间.

 
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name[,tbl_name] ...
 
当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。
 
多数时间并不需要运行OPTIMIZE TABLE,只需在批量删除数据行之后,或定期(每周一次或每月一次)进行一次数据表优化操作即可,只对那些特定的表运行,这个操作对于游戏数据库中的某些表特别起作用,这些表基本上需要每周做一次优化,甚至一周两次。
 
如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有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命令的作用相当于一个复制主服务器,默认情况下,这些命令将被复制到复制从属服务器中。