假設大表表名:t_log
delete操作會記錄mysql日誌,大資料量的清理會耗費大量時間,所以一般得用其他方式。
1、如果大表資料對我們來說不重要,完全可以直接清理,那麼可以用truncate
truncate table t_log;
truncate的操作不記錄mysql日誌,所以資料是不能恢復的。
2、如果需要保留部分資料
建立表並直接保留需要的資料
create table t_log_2019 as select * from t_log where create_time>'2019-01-01 00:00:00';
刪除資料
truncate table t_log;
恢復保留的資料
insert into t_log select * from t_log_2019;
刪除臨時表
drop table t_log_2019;
3、當前表資料需要全部保留,或者後續再刪除
建立乙個同結構的表
create table t_log_2019 like t_log;
直接通過變更表名的方式處理:
rename t_log to t_log_bak,t_log_2019 to t_log;
然後對於t_log_bak,不管你想刪還是留都可以慢慢處理
mysql 清理表空間 MySQL 清除表空間碎片
碎片產生的原因 1 表的儲存會出現碎片化,每當刪除了一行內容,該段空間就會變為空白 被留空,而在一段時間內的大量刪除操作,會使這種留空的空間變得比儲存列表內容所使用的空間更大 2 當執行插入操作時,mysql會嘗試使用空白空間,但如果某個空白空間一直沒有被大小合適的資料占用,仍然無法將其徹底占用,就...
mysql定時器定時清理表資料
1.首先先檢視mysql是否開啟定時任務開關 2.value為on則已開啟,off則關閉 如果是off,就先開啟 set global event scheduler on 3.然後建立我們想要的定時器 delimiter drop event if exists deletelog create ...
mysql 大表 驅動 MySQL小表驅動大表
在了解之前要先了解對應語法 in 與 exist。in後的括號的表示式結果要求先輸出一列字段。與之前的搜尋字段匹配,匹配到相同則返回對應行。mysql的執行順序是先執行子查詢,然後執行主查詢,用子查詢的結果按條匹配主查詢。exist後的括號裡則無輸出要求,exist判斷後面的結果集中有沒有行,有行則...