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 操作
可以发现文件大小减少了