mysql中回收删除表的空间,优化表

REPAIR TABLE table_name 修复表
OPTIMIZE TABLE table_name 优化表
myisamchk table.MYI 修复索引
REPAIR TABLE 用于修复被破坏的表。
myisamchk TABLE.MYI 用于修复被破坏的索引文件。
OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被
回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上
,而非数据库)。 多数时间并不需要运行OPTIMIZE TABLE,只需在批量删除数据行之后,或定期(每周一
次或每月一次)进行一次数据表优化操作即可,只对那些特定的表运行,这个操作对于游戏数据库中的某 些表
特别起作用,这些表基本上需要每周做一次优化,甚至一周两次。
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_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上,这会重建表。
重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。