optimize table 定期整理碎片

 

当频繁的对(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,建议使用optimize table功能对这类表进行碎片整理,避免因为“空洞”导致性能问题。

OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

示例:

创建一个表t,字段中包含varchar和text的数据类型,使用repeat函数进行插入大量的字符串。

create table t (id varchar(100), context text);

insert into t values (1,repeat('haha',100));
......//大量的进行该类操作
insert into t select * from t;

进入存放表数据所在的文件夹。

查看my.cnf文件,找到datadir对应的路径,就是表数据存放的路径。

例如当前的路径就是/var/lib/mysql,我的这张表创建在song这个数据库中。

cd  /var/lib/mysql/song     #表数据所在路径
du  -sh  t.*       #查看t的物理文件大小

删除表中的大部分数据,在进行查看t的物理文件大小的操作,发现并没有因为数据删除而减少,接下来对表进行optimize 操作

 

可以发现文件大小减少了

 

posted @ 2019-02-15 16:15  宋songsong  阅读(457)  评论(0编辑  收藏  举报