使用OPTIMIZE TABLE命令来整理表碎片实践
①、前言
对含有BLOB或TEXT字段的表,若经常做修改或删除类的操作,需要定期执行OPTIMIZE TABLE命令来整理碎片。
②、操作
create table t1(id varchar(64), content text)engine=myisam, default charset=utf8;
插入数据
insert into t1 values(1, repeat('tony', 100)); --repeat('tony', 100),返回tony重复100次后的数据
insert into t1 values(2, repeat('tony', 100));
insert into t1 values(3, repeat('tony', 100));
快速往表中插入大量数据的一种好方式,重复执行下面的语句
insert into t1 select * from t1; --从t1查询出所有数据,再插入t1表,数据成倍增长
查看文件大小
cd /var/lib/mysql/test/
du -sh t1.*
12K t1.frm
310M t1.MYD
4.0K t1.MYI
删除数据再查看文件大小
delete from t1 where id = 2;
du -sh t1.*
12K t1.frm
310M t1.MYD
4.0K t1.MYI
发现删除大量数据后,表文件的物理大小并没有减少。
使用OPTIMIZE TABLE命令整理表碎片
optimize table t1;
du -sh t1.*
12K t1.frm
206M t1.MYD
4.0K t1.MYI
使用OPTIMIZE TABLE命令整理表碎片后,表文件大小减少了将近三分之一。
当你删除数据时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。