大表全量update時採用表替換方式

2021-09-01 07:07:06 字數 1146 閱讀 4603

剛開始時寫的程式全表update,2張表資料都超過千萬,速度超慢。

declare i int ;

begin

for i in 0 .. 10

loop

update (select /*+ bypass_ujvc */a.rowid, a.user_id , a.eparchy_code , b.user_id bbbb, b.eparchy_code cccc

from tf_b_tdiall a,crm_tf_f_user3 b

where a.msisdn = b.serial_number and a.user_id is null

and b.remove_tag = '0' ) c

set c.user_id = bbbb ,c.eparchy_code = cccc

where rownum <100000;

commit;

end loop;

end ;

後來查了些資料,資料庫在update時會記錄大量的redo日誌,造成極大的空間和時間上的浪費,解決方法可新建相同結構的一張表,然後採用insert和rename將表替換掉,整個過程1個小時以內就可以解決,而如果用上面的update,只怕幾天都難以達到目的。

alter table tf_b_tdiall_new nologging;

select a.tradeid,a.msisdn,a.imei,a.companyname,a.terminalmodel,a.softwareos,

a.iswcdma,a.isumts,a.ishsdpa,a.ishsupa,a.isgprs,a.isedge,a.iswap1,a.iswap2,a.ismms,

a.isstreaming,a.issoundaac,a.isvideoaac,a.is***,a.file_name,a.indb_time,a.month,

a.is_3g,b.user_id,b.eparchy_code,a.param_value4,a.param_value5

from tf_b_tdiall a,crm_tf_f_user1 b

where a.msisdn = b.serial_number and a.user_id is null

and b.remove_tag = '0' ;

mysql大表更新 大表的update更新

因為業務需要對一張大表的乙個列值進行update更新,表中有資料一億多條,為了更新這一億多條資料,我做了一下嘗試,給各位同學留個前車之鑑。表名 test 列名 name varchar2 50 方法一 直接對大表update,語句 update test set name replace name,...

Oracle 大表之間關聯update

declare maxrows number default 5000 row id table dbms sql.urowid table p id table dbms sql.varchar2 table cursor acnt first cur is select use hash t1,...

大資料量採用什麼方式建表

以下是幾種常見的分表演算法。1.按自然時間來分表 分庫 2.按數字型別hash分表 分庫 如果我們要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的使用...