数据库表的空间回收
思考一下:为什么又的时候,将表中的数据删掉了一半,但是表文件的大小还是没变?
一个InnoDB表包含两个部分,即:表结构定义和数据,表结构定义占用的空间很小,今天主要讨论的是表数据。
参数innodb_file_per_table
innodb_file_per_table参数控制表数据在共享表空间还是单独的文件;
参数设置为OFF,表示表的数据放在系统共享表空间,跟数据字典在一起;
参数设置为ON,表示每个InnoDB表数据存储在一个以.ibd为后缀的文件中;
默认为ON,一个表单独存储为一个文件更容易管理,直接通过drop table命令,系统可以直接删除。
但是要解决表中的数据被删除,但是表空间还未回收的问题的话,先了解一下删除的流程.
数据删除流程
假如现在要删除R4的这个记录,InnoDB引擎会把R4这个记录标记为删除,再插入一个ID在300和600之间的记录的时候,可能会复用这个位置,但是磁盘文件大小并不会缩小。
如果删除一个数据页上所有的数据,那么整个数据页都是可以复用的;数据页