mysql 第14章 表碎片 mysql 第14章 表碎片

2022-06-27

使用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,一个月一次,看实际情况而定了。

阅读 862