概述
MySQL里delete方式刪除數據,也存在類似oracle一樣高水位的問題,表空間不釋放,下面是收集的幾種回收方式,供供大家參考。
01
使用 OPTIMIZE
命令語法:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
最簡單的命令:
OPTIMIZE table act_demo_test;
如果已經刪除了表的一大部分,或者如果已經對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進行了很多更改,則應使用 OPTIMIZE TABLE。
被刪除的記錄被保持在鏈接清單中,后續的INSERT操作會重新使用舊的記錄位置。可以使用OPTIMIZE TABLE來重新 利用未使用的空間,并整理數據文件的碎片。
注意:
在OPTIMIZE TABLE運行過程中,MySQL會鎖定表。因此,這個操作一定要在網站訪問量較少的時間段進行。
一個37G的表,耗時5s,時間僅作參考,和服務器性能有關。
02
使用Alter命令
相當于刪除舊表,建立新表。
例如:
mysql> alter table tablename engine=innodb;
一個37G的表,耗時7s,時間僅作參考,和服務器性能有關。
03
導出導入
利用mysqldump導出數據,然后再重新導入數據。
mysqldump導出表語法:
mysqldump -u用戶名 -p密碼 -h主機 數據庫 表
例子:
mysqldump -uroot -p sqlhk9 a --no-data
注意:
這種方式會影響業務正常使用,不推薦。