数据删了一半,表文件大小不变

本文主要介绍了MySQL InnoDB表的空间回收相关内容。在MySQL 8.0前后,表结构定义的存储位置不同。innodb_file_per_table设置为on时,表存储在.ibd文件,便于管理。删除行和插入数据会造成表空间空洞,可通过重建表解决,如使用alter table A engine=InnoDb命令,且支持ONLINE DDL。

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

表的空间回收

InnoDB:表结构定义和数,

mysql 8.0之前放在以.frm为后缀的文件里,mysql8.0之后把结构放在系统数据表中(表结构空间小)

innodb_file_per_table 

on 每个表存储在.ibd为后缀的文件中(drop table系统会直接删除这个文件,容易管理)推荐

     删除行,表空间没有被回收?

     数据页复用:随意使用(delete语句吧整个表的数据删除,数据页就会标记为可复用,造成空洞)

                       插入数据也会造成空洞:插入的数据要放到新的页里,而且是按顺序,这样会形成大量空洞

-》重建表 (1、临时表重新插入。2、alter table A engine=InnoDb命令重建表(自动转存数据、交换表名、删除旧表))

                    ONLINE DDL:重建表的过程允许对A做增删改查

                     alter table在启动时拿到写锁,拷贝数据之前退化成读锁(只是禁止其他线程DDL)

online  

inplace

记录的复用:按照顺序使用

off 数据放在共享表(跟数据字典放在一起)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值