mysql 我删除了数据为什么文件还是那么大

在mysql中 我使用delete 删除了大量数据但是,数据表文件还是那么大,是怎么回事?

mysql存放数据也是放在文件中的,在mysql中的innodb 

WeChatae8b7f1ff8be09f53a1639734b2a86cb.png

WeChat43efa8d67e433b10d2cb712d86bf4350.png

test表中有两个文件存储,.frm文件用来存储表结构  .ibd文件是用来存储数据,在mysql8以后是允许把表结构和存放在数据表中

WeChat2cd52e8f8e57daf00d0d2105455005e9.png

InnoDB 里的数据都是用 B+ 树的结构组织的。

假设,我们要删掉 500这个数据,InnoDB 引擎只会把 100个记录标记为删除。如果之后要再插入一个 ID 在 300 和 600 之间的记录时,可能会复用这个位置。但是,磁盘文件的大小并不会缩小。

 

在innodb中还存在数据页默认是16K 如果把这整个数据页删除,那就是数据页复用

但是,数据页的复用跟记录的复用是不同的。

记录的复用,只限于符合范围条件的数据。

而当整个页从 B+ 树里面摘掉以后,可以复用到任何位置

 

如果数据是按照索引递增顺序插入的,那么索引是紧凑的。但如果数据是随机插入的,就可能造成索引的数据页分裂。

在有些时候会发现id自增,但是突然发现有个id不见了,如 100 101 103 少了102  这时候查询数据表是能够查到102这个id,就被添加到空洞

 

如果要收缩一个表,只是 delete 掉表里面不用的数据的话,表文件的大小是不会变的,你还要通过 alter table 命令重建表,才能达到表文件变小的目的。

alter table t engine=innodb,ALGORITHM=inplace;

这个方式是可以考虑在业务低峰期使用的,而 MySQL 5.5 及之前的版本,这个命令是会阻塞 DML 的

如果整个表需要删除释放空间可以使用

truncate table T;

 

posted @ 2021-12-12 15:14  时间掉飞机  阅读(834)  评论(0编辑  收藏  举报