(1)数据删除流程

单行或多行记录被删除, 这些位置会被标记为复用, 下次插入记录会直接被复用, 如果是追加无法使用复用,
删除一个数据页上的所有记录, 这个数据页会被标记为复用 , 数据页可以被复用到任何位置, 
delete命令只是把记录或数据页标记为"可复用",磁盘文件是不会变的; 不能回收表空间;

注意:插入数据也会导致数据页空洞; 例如id1 id2 id4 id5使用的是一块数据页, 如果插入id3行数据, 可能会导致mysql分两个数据页保存这5行数据; 

(2)回收表空间解决方案: 重建表

重建表的工作原理:  和online的工作原理一致, 参考文章https://blog.51cto.com/1000682/2356596
命令: alter table table_name engine=innodb; 

注意: 重建表语句需要事先获取mdl写锁, 不要在业务高峰期, 复制文件对io性能有一定影响;