再介紹刪除解決方案前,先來回顧下三種刪除表的操作:delete語句、truncate語句以及drop語句。
drop > truncate > delete
下面說下刪除大量資料的解決方案:
delete from t_test limit 100000或者建立儲存過程:
delimiter $$drop procedure if exists proc_batch_delete;
create procedure proc_batch_delete()
begin
declare tcount bigint;
select count(0) into tcount from t_test;
while tcount>0 do
delete from t_test limit 1000;
end while;
select tcount;
end $$
delimiter ;
//呼叫儲存過程 call proc_batch_delete;
create table new_test like t_test;表結構與原表結構相同
這裡要看下是刪除的資料多,還是保留的資料多,我們這裡預設刪除的資料多,所以新錶中只保留有用的資料!幾千萬的資料量一定要分批插入,一次50萬為最佳,畢竟mysql的資料處理能力有限,可以按id查詢後插入!
insert into new_test select *from t_test where id>500000 and id<=1000000;
drop table t_test;
alter table t_test_new rename t_test;(未完待續。。。)
mysql大量資料刪除
近期有一張表,存量有3000多萬資料,每天還在以40萬左右增長。業務上準備只保留兩個月的資料。準備刪除。這個量直接刪除,可能會導致鎖表。要麼寫個儲存過程,迴圈,每次刪除1000條,sleep下。當然這個方法很不錯。但delete是dml語言,刪除只是把狀態標記為刪除,並沒有刪除資料檔案,也就是空間索...
mysql刪除大量資料
mysql刪除大量資料時使用批量刪除,批量刪除時,不要使用排序,會影響刪除效率 delete from table name where id 66169770 limit 1000000 以下資料摘自 生產環境,往往需要更新 刪除大量的資料,由於很可能消耗太多的io資源,對於生產繁忙的系統,需要小...
mysql批量刪除大量資料
mysql批量刪除大量資料 假設有乙個表 syslogs 有1000萬條記錄,需要在業務不 停止的情況下刪除其中statusid 1的所有記錄,差不多 有600萬條,直接執行 delete from syslogs where statusid 1 會發現刪除失敗,因為lock wait timeo...