MySQL Optimize Table

本文探讨了如何使用MySQL的OptimizeTable命令回收空间、减少碎片,从而提高系统运行效率。通过实例展示了OptimizeTable命令的应用效果,并讨论了其在不同数据库引擎中的支持情况,以及如何在多库环境中安全执行此操作。
很难说Optimize Table到底能不能提高系统运行效率,但是有一点是肯定的:它能够帮我们回收更多的空间、减少“碎片”(defragment)。

1. 回收空间 Defragment

在InnoDB的维护过程中,我们总会遇到磁盘耗尽、或者InnoDB Tablespaces用完的情况。这时候,在考虑扩容等方案之前,最好先使用Optimize Table试试。如果你的表大字段(Text Blob Varchar),并且更新、删除较频繁的话,Optimize之后可能会腾出大量的空间。

#ls -lah users_0.ibd
-rwxr-xr-x 1 mysql dba 736M May 6 09:50 users_0.ibd

root@test 10:10:53>optimize table users_0;
+---------------------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------------+----------+----------+----------+
| test.users_0 | optimize | status | OK |
+---------------------+----------+----------+----------+

#ls -lah users_0.ibd
-rw-rw---- 1 mysql dba 644M May 6 10:09 users_0.ibd


可以看到这里的ibd文件大小释放了约100M。

2. InnoDB 和 MyISAM

目前支持optimize命令的引擎有 MyISAM, InnoDB, and ARCHIVE,对于InnoDB,会将optimize命令映射为ALTER TABLE命令,该命令会重建数据表,更新索引统计信息、回收主键索引中空间。

3. InnoDB 和 MyISAM

如果你的MySQL是有备库的,如果你只希望在主库上执行的话,那么可以加上关键字NO_WRITE_TO_BINLOG(或者LOCAL,意思完全相同)。

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE

这对于MM结构的MySQL数据库尤为重要,因为很多时候,你只是想在备库上执行,而不希望影响主库。

http://www.orczhou.com/index.php/2010/05/mysql-optimize-table/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值