联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
现在有个案例,有一张很大的表t1,需要更新其中的一个列,然后这个列是参考另外一个表t2中的列
直接sql操作如:
update t1 ta set prov_code=(select area_code from t2 tb where ta.id=tb.id);
利用rowid,分批提交的思路写出如下sql,执行大表更新效率比较高
DECLARE CURSOR cur IS SELECT a.area_code, b.ROWID ROW_ID FROM t2 a, t1 b WHERE a.id = b.id ORDER BY b.ROWID; V_COUNTER NUMBER; BEGIN V_COUNTER := 0; FOR row IN cur LOOP UPDATE t1 SET prov_code = row.area_code WHERE ROWID = row.ROW_ID; V_COUNTER := V_COUNTER + 1; IF (V_COUNTER >= 1000) THEN COMMIT; V_COUNTER := 0; END IF; END LOOP; COMMIT; END;
这里利用了rowid排序,使得update操作是一个一个数据块的进行,减少逻辑读,分批提交减小undo压力
這是確切信息我要找的,謝謝! Arron