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

相关文章
-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02