全部博文(930)
分类: Mysql/postgreSQL
2011-02-16 19:39:37
Optimize Table到底能不能提高系统运行效率,但是有一点是肯定的:它能够帮我们回收更多的空间、减少“碎片”(defragment)。
1. 回收空间 Defragment
在InnoDB的维护过程中,我们总会遇到磁盘耗尽、或者InnoDB Tablespaces用完的情况。这时候,在考虑扩容等方案之前,最好先使用Optimize Table试试。如果你的表大字段(Text Blob Varchar),并且更新、删除较频繁的话,Optimize之后可能会腾出大量的空间。
可以看到这里的ibd文件大小释放了约100M。
2. InnoDB 和 MyISAM
目前支持optimize命令的引擎有 MyISAM, InnoDB, and ARCHIVE,对于InnoDB,会将optimize命令映射为ALTER TABLE命令,该命令会重建数据表,更新索引统计信息、回收主键索引中空间。
3. InnoDB 和 MyISAM
如果你的MySQL是有备库的,如果你只希望在主库上执行的话,那么可以加上关键字NO_WRITE_TO_BINLOG(或者LOCAL,意思完全相同)。
这对于MM结构的MySQL数据库尤为重要,因为很多时候,你只是想在备库上执行,而不希望影响主库。
参考文献