背景:
將正表的資料備份到歷史表裡,且刪除正表的資料
方案 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等等後,在海量使用者請求的情況下,資料庫仍然無法支撐。需...