(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性能有一定影響;