剛開始時寫的程式全表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的使用...