MySQL怎么解决delete大量数据后空间不释放的问题

文 / @WordPress主题

MySQL怎么解决delete大量数据后空间不释放的问题

背景知识

在 MySQL 中,insert 和 update 操作可能会导致页分裂,从而产生碎片。而对于大量的 update 操作,也会产生文件碎片化。当删除一些行时,这些行只是被标记为已删除,而不是真的从索引中物理删除,因此空间也没有真正被释放回收。这些没有被释放的空间会形成碎片,最终会导致表的扫描效率降低,长期占据磁盘空间,导致磁盘使用率越来越高。

如何清理碎片?

修复问题的前提是要先找到问题,这样才能对症下药。可以通过以下方法查看表的碎片情况:

1. 查看数据库中每个存在碎片的表

```mysql
select concat('optimize table ', table_schema, '.', table_name, ';'), data_free, engine
from information_schema.tables
where data_free > 0 and engine != 'MEMORY';
```

2. 查看指定表的碎片情况

```mysql
show table status like 't_user';
```

清理碎片的方法有以下几种:

1. alter table xxx engine=innodb;(本质上是 recreate)

通过 alter table 命令重新整理碎片。当执行优化操作时,实际执行的是一个空的 alter 命令,但是这个命令也会起到优化的作用,它会重建整个表,删掉未使用的空白空间。

2. optimize table

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。