因为业务需要对一张大表的一个列值进行update更新,表中有数据一亿多条,为了更新这一亿多条数据,我做了一下尝试,给各位同学留个前车之鉴。
表名:test
列名:name varchar2(50)
方法一:
直接对大表update,
语句:update test set name=replace(name,chr(13),\);
结果:执行12个小时候,sql仍未执行完成,于是在执行12个小时之后,我把这个交易kill 了;
后果:最终耗费了48小时来完成数据回滚,给数据库带来了严重的的压力,同时造成了大量的锁等待,结局很悲惨。
方法二:
吸收了方法一的教训,一次修改的话,undo数据太大,对数据库性能有严重的影响,书写了一个存储过程,每一万条数据提交一次,同时新建一张表t1和sequence sq_test,记录已经修改的条数,sql如下:
CREATE OR REPLACE PROCEDURE UpdateBigTableRecord AS
CURSOR c_cursor IS
select rowid from test;
v_rowid varchar(30);
x number := 0;
y number(30);
BEGIN
OPEN c_cursor;
LOOP
FETCH c_cursor
如果觉得《mysql大表更新_大表的update更新》对你有帮助,请点赞、收藏,并留下你的观点哦!