1億條以上資料,備份歷史表,並且刪除正表資料方案

2021-10-02 02:31:31 字數 1441 閱讀 2724

背景:

將正表的資料備份到歷史表裡,且刪除正表的資料

方案 1 先將要備份的資料的主鍵全部放到一張臨時表,且將臨時表加索引

2 從臨時表去查詢正表資料,然後備份該條資料到歷史表裡,然後刪除正表資料

在刪除臨時表資料(在查詢臨時表的時候,可以使用mod函式將該字段取餘,起多個執行緒去做,

可以實現資料不重複處理問題).

解決方案實現

1:建立臨時表

create tabel task_chl_statuscd1100107 as select contact_task_chl_id from task_chl

2: 為臨時表建立索引

3:建立儲存過程(該儲存過程可以替換為**實現),作者迴圈呼叫儲存過程

create or replace procedure totaskchl(i_size in number) is

v_insertsql varchar2(500);

v_tabledate varchar2(500);

begin

--這裡使用了mod函式的方式取數,然後**呼叫該儲存過程的時候,可以多執行緒,傳不通的值

-- 就不會出現取到重複的資料

for r in (select *

from task_chl_statuscd1100107

where mod(contact_task_chl_id, 1) = i_size

and rownum < 5001) loop

select to_char(a.create_date, 'yyyymm')

into v_tabledate

from contact_task_chl a

where a.contact_task_chl_id = r.contact_task_chl_id;

v_insertsql := 'insert into contact_task_chl_' || v_tabledate ||

' select * from contact_task_chl where contact_task_chl_id = ' ||

r.contact_task_chl_id;

execute immediate v_insertsql;

delete from contact_task_chl

where contact_task_chl_id = r.contact_task_chl_id;

delete from task_chl_statuscd1100107

where contact_task_chl_id = r.contact_task_chl_id;

end loop;

--dbms_output.put_line(v_insertsql);

commit;

end totaskchl;

巧用外部表備份歷史資料

在很多的系統中,隨著時間的推移,都會沉澱大量的歷史資料。一般資料量達到一定程度都會考慮使用分割槽表來處理。根據業務規則,可能有些歷史資料隔一段時間就需要做清理了,這個時候歷史資料就需要在分割槽級進行清理。在不同的系統,不同廠商都有不同的實現方案。但是從資料安全角度來說,都需要做備份工作,也是預防萬一...

MySQL優化 1億條資料效率COUNT

最近發現了乙個mysql快速匯入資料方法load data infile,具體參考這個文章。下面用幾條命令來給大家看看,效率結果。簡單說下 1.txt 開始只有10萬資料,後來用vim 新增到了2000萬行,用windows下的編輯器直接卡機的,windows下安裝gvim可以的。資料表型別inno...

MySql定期備份資料到歷史表的解決方案

前言 網際網路專案最大不瓶頸還是在於資料庫,80 的資料請求只針對20 的資料 特別是電商專案,體現的更為明顯,大量的資料請求,即使mysql在一主多從,讀寫分離,使用了elasticsearch memcached redis mongodb等等後,在海量使用者請求的情況下,資料庫仍然無法支撐。需...