更新大批量資料的背景:
使用者需要將vip的微信標識,傳給使用者的erp會員檔案中,已知存量資料約50w行資料,線下的微信標識資料我們開發提供了openid和erpid的csv檔案,erpid和線下的會員檔案id對應,需要將openid也更新到會員檔案裡。
更新數量大致分為兩大步驟
一、將我們要更新的資料來源匯入資料庫內,需要建立臨時表,將資料傳入臨時表
二、寫游標,將臨時表內的資料與需要更新的資料進行更新
1.將csv檔案裡面的資料匯入資料庫臨時表中,先建立臨時表
create table vip_openid
(erpid number(10),
openid varchar(200)
)2.臨時表建立後,將cvs檔案裡的資料匯入表中,文字匯入器
選擇要匯入的csv檔案,注意csv檔案的表字段和資料庫表字段對應
選擇檔案後在介面將會預覽匯入的資料
3.點選到oracle的資料,選擇匯入的表,先選擇使用者名稱,使用者名稱下的表名,然後選擇表與csv檔案表字段對應關係,我們選擇匯入,可以看到提示匯入完成。
4.接下來就是對會員表和臨時表的資料關聯更新程式設計客棧,我們先使用直接update方式進行更新試驗,該方法只更新5w資料,耗時12分鐘左右:
於是參考百度文件建議,寫了乙個游標如下
declare
cursor cur is--宣告游標cur
select b.openid,a.id row_id
from c_client_vip a ,vip_openid b
where a.id=b.erpid
order by a.id;--從a和b表中找到id對應的openid,並對游標內陣列排序
v_counter number;--宣告乙個number型別的變數
begin
v_vounter:=0;--初始化變數值為0
for row in cur loop--遍歷游標
update c_client_vip a set a.openid=row.openid where a.id=row_id;
v_counter:=v_counter+1;--每次迴圈變數值+1
if(v_counter>=1000) then
commit;
v_counter:=0;--每更新1000行,v_counter值為1000時候,就提交給程式設計客棧資料庫
www.cppcns.com 提交後將變數歸零,繼續程式設計客棧下乙個1000行更新
end if;
end loop;
commit;
end;
大概48w行資料,43秒即更新完畢。
使用以上方式注意一點,因為資料庫會員表的id有索引,所以使用游標速率很快。如我們的多表關聯字段沒有索引,使用此方式可能效果不是很明wxohep顯。
總結
oracle 更新大批量資料變更步驟
生產環境中遇到更新或者刪除大批量資料的時候,不能直接進行操作,要批量進行。1 獲取要進行更新的資料的主鍵,2 建立臨時表並將獲取的資料主鍵匯入到建立!bin sh created by yangql on 2011 11 23 parameters home oracle profile ora u...
mysql大批量更新資料
大批量的更新資料如果再使用傳統的 update 方法一條一條的更新,效率是很慢的,而且效能差,也很容易造成阻塞。1 使用mysql 自有的語句構建批量更新 update tble set price case id when 16 then 7.6 when 19 then 8.86 when 20...
mysql跨庫批量更新大批量資料的思路
需求是這樣的,在a資料庫例項中定時讀取大批量資料 這裡暫定20w 然後在b資料庫例項中,將讀取的20w資料寫入b資料庫例項中的表 表裡有3000w的資料 插入前判斷條件使用者id,存在更新,不存在則插入。如果是幾萬條以下的資料,這很簡單。讀取資料 foreach 查詢是否存在 更新或插入。但是真是情...