表的空间回收
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 数据放在共享表(跟数据字典放在一起)