在线上数据库报警说空间快满了,于是开发直接执行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 表名
可以立即释放空间。
至于原因,后续需要做进一步的探究学习。