mysql 清除大數據表單
阿新 • • 發佈:2018-05-15
方法 命名 SQ 服務 l數據庫 create ble and web
背景:mysql數據庫中有個日誌表記錄高達800多萬,影響了mysql的正常業務訪問,現需要清理三個月之前的所有數據,大概600多萬
方法一:傳統delete from xxx,傳統,普通,效率底下,高數據清理容易搞垮數據庫。
方法二:truncate,這個操作會把表中所有的數據給清除掉。(如果是要清空數據的話這個效率最高)。
方法三:間接法。步驟如下:
1.創建t_req_log同結構的新表 t_req_log_new 。
create table t_req_log_new like t_req_log 或通過原表建表語句創建也行。
2.訪問人數較少時,停web服務(不然會操作還會寫日誌到該表中)。
3.執行sql將t_req_log表近三個月的數據導入到t_req_log_new新表中。
insert into t_req_log_new
select * from t_req_log where time between ‘2018-02-01 00:00:00‘ and NOW();
4.同時重命名兩張表,間接實現數據刪除操作,將 t_req_log_new改為原始表名替換原始表。
RENAME TABLE t_req_logTO t_req_log_old, t_req_log_new TO t_req_log;
5.刪除舊表 (看情況刪不刪除)。
drop table t_req_log_old
6.重啟服務器,觀察日誌。
以上操作會比delete刪除快n多倍。
可間隔一段時間執行一次,也可在數據庫中做一個事物,自動每日刪除
mysql 清除大數據表單