降低 mysql table 在硬碟的實際用量

技術筆記
最近 vps 的硬碟又不夠了 想出了一連串降低用量的方法 本來想說 把過大的 table 切成數十個 原本的 table 有 八億筆資料 把它切割成五千萬筆一個 table 然後把這些 table 都會出成 sql 檔案 存在硬碟裡 因為這些資料其實永遠都不會變動了 而且暫時也用不到 有需要再把他 restore 到便宜的裝置上就好 (例如 NAS) 用程式跑了好一陣子以後 也都下載完了 發現原本的 table 在硬碟裡面還是佔了 80G 但如果從 phpmyadmin 看 卻說只有佔用了 10G 問題是什麼呢? 如果你的 table 用的是 innodb 一個 table 會有兩個檔案 其中一個吃容量很大的叫做 ibd 這個檔案會有一些 sql 的歷程 那些歷程是萬一你的 table 壞掉的時候 可以讓你重跑的資料 即使是你把資料刪除大部分 這個檔案只會變大不會變小   後來我想到一個方法 只要你弄一個新的 table 然後再把舊的 table 的資料倒過去 歷程並不會被複製過去 只有資料會被複製過去 所以檔案大小就會變小 複製完畢後 只要把舊的刪掉 再把新的名稱改成舊的 就完成啦 至於歷程會不見的部分 就看你有沒有需要用到歷程的功能 自己分析一下