數據庫中有些表使用delete刪除了一些行后,發現空間並未釋放
產生原因:類比Oracle的高水位線產生原理
- delete 不會釋放文件高水位
- truncate會釋放 ,實際是把.ibd文件刪掉了,再建一個。
- delete + alter engine=innodb會釋放, 相當於重建表。
對應解決方案:
- 執行 OPTIMIZE TABLE 表名:只對MyISAM, BDB和InnoDB表起作用,而且會鎖表!
- 寫一SQL,創建新表,刪除舊表,新表重命名:生產環境中不停機情況下,數據比較難處理
- 考慮用表分區,過期的表分區直接刪除,不存在高水位問題,推薦。