【Mysql系列】Mysql用delete删除数据后无法释放空间

当线上数据库空间不足时,开发人员尝试通过执行DELETE语句清理数据,却发现空间未被释放。这是因为DELETE操作会标记数据而非立即删除,需要使用OPTIMIZE TABLE来释放空间。相比之下,DROP TABLE和TRUNCATE TABLE则能立即释放空间,但前者会永久删除表,后者仅清空表内容。了解这些命令的区别对于有效管理数据库空间至关重要。
摘要由CSDN通过智能技术生成

在线上数据库报警说空间快满了,于是开发直接执行delete操作。

delete from table_name t where t.create_time > '2021-03-21'

结果发现空间并没有释放。什么原因呢?

DELETE

包含约束条件的执行的sql:

delete from table_name t where 约束条件

不会立即删除数据,会标记数据,但不会释放空间。
如果需要立即释放空间,需要optimize命令:

optimize table table_name

备注: 执行optimize命令时,MySQL会锁定表。因此要在数据量少时再做处理。

不包含约束条件的sql:

delete from table_name

可以立即删除数据。

DROP

执行的sql:

drop table table_name

执行操作后可以立即释放空间。

TRUNCATE

执行的sql:

truncate table 表名 

可以立即释放空间。

至于原因,后续需要做进一步的探究学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值