[MYSQL]如何删除数据

本文介绍了InnoDB表数据存储方式及参数innodb_file_per_table的作用,探讨了delete操作的内部机制及其导致的数据空间释放问题,并提供了两种解决方案:通过重建表进行数据迁移或使用ALTER TABLE命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

表数据的存储

delete内幕

引发的小问题

如何解决

1.重建一张新表 把数据全部迁移过去

2.alter table X


表数据的存储

表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的:

  1. OFF表示存在系统共享表空间

  2. ON表示每张表存在一个独立的 XX.idb文件中 (drop table的时候 直接删除文件,如果是存在系统共享空间中,空间不会被回收)

为了方便管理,一般建议该值设置成on,5.6.6版本开始 这个值默认就是ON。

 

delete内幕

数据记录被删除,记录的物理空间不会被回收,只会标记成被删除 可复用,数据页也是一样。

 

引发的小问题

所以会导致一个诡异的事件->数据被delete了,但是磁盘空间不会变小

 

如何解决

1.重建一张新表 把数据全部迁移过去

由于大量的删除 更新 或者无序插入,会导致数据页很多空洞的地方无法被利用。重建一张表 顺序插入,充分填充数据页

 

2.alter table X

流程如下图,5.6之前的都是“离线”的不支持写入操作,5.6开始可以支持online DDL了 (具体的可以看online DDL那篇)

这个也是要业务低峰期操作

 

小细节
alter table t engine=innodb,ALGORITHM=inplace; 【默认就是这个】

这个里面的临时文件就是在innodb内部产生的


alter table t engine=innodb,ALGORITHM=copy;

这个临时文件是在server层做的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值