MySQL刪除大表實踐 大於150GB

2021-10-25 07:47:32 字數 1077 閱讀 7967

生產環境資料庫磁碟快滿了,此時:

需要完全刪除乙個記錄歷史資料的大表(約160gb);

需要將一張大表中7月之前的資料全部刪除。

mysql中,drop和truncate是ddl(data define language)操作,操作立即生效,原資料不放到 rollback segment中,無法回滾;而delete語句為dml(data maintain language),這個操作會被放到 rollback segment中,事務可以回滾。執行效率方面,drop>truncate>delete。

我的實際情況是,要刪除的表很大(約160gb),如果使用delete可能要執行數天,且刪除表中資料後需要保留表結構,所以選擇使用truncate table即可。

truncate table huge_table;
由於表很大,排除delete方案(可能要執行數天)。可以分三步進行:

把原表重新命名為備份表;

建立乙個表結構和原表一樣的新錶;

提取原表中需要保留的資料,儲存到新錶中;

對備份表進行truncate。

-- 原表重新命名為備份表

rename table huge_table to huge_table_backup;

-- 建立新錶

create table huge_table like huge_table_backup;

-- 提取需要的資料插入

insert into huge_table select * from huge_table_backup where create_time >= "2020-10-01 00:00:00";

insert into huge_table select * from huge_table_backup where create_time >= "2020-09-01 00:00:00" and create_time < "2020-10-01 00:00:00";

-- truncate備份表

truncate table huge_table_backup;

MySQL 儲存過程刪除大表

1 許可權問題 alter routine 編輯或刪除儲存過程 create routine 建立儲存過程 execute 建立儲存過程 2 儲存過程相關的一些命令 show procedure status g 檢視資料庫中有哪些儲存過程 show procedure status where d...

mysql刪除大表更快的drop table辦法

曾經發文介紹過,drop table 特別是碰到大表時,在drop table 過程中,所有操作都會被hang住。這是因為innodb會維護乙個全域性獨佔鎖 在table cache上面 直到drop table完成才釋放。在我們常用的ext3,ext4,ntfs檔案系統,要刪除乙個大檔案 幾十g,...

mysql刪除大表更快的drop table辦法

利用硬鏈結和truncate降低drop table對線上環境的影響 在drop table的時候,所有程序不管是ddl還是dml都被hang起 直到drop結束才繼續執行 這是因為innodb會維護乙個全域性獨佔鎖 在table cache上面 直到drop table完成才釋放。在我們常用的ex...