引用 1 楼 oraclefans_ 的回复:方法二:建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作.update( select a.A列,b.A列 from t1 a,temp_t1 b where a.id=b.id) set a.A列=b.A列那么临时表temp_t1中的数据是否也要从表t1中完全进行拷贝?
批量更新,Oracle下merge into就比较快了,想要再提升的话1、using包含的Select,看能再修改不,试试hint2、试试存储过程3、从程序的角度修改调用新增or更新的逻辑
方法一:采用存储过程,使用循环,限制更新的条数,效率不是很高..方法二:建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作.update( select a.A列,b.A列 from t1 a,temp_t1 b where a.id=b.id) set a.A列=b.A列方法三:同样的使用临时表,根据插入产生的日志少于update的日志的办法,使用truncate table t1;create table t1 as select * from temp_t1;
可以使用rowid进行更新,后果是取消随即更新,按照的读入的数据块顺序进行更新,增加更新效率.但是会出现大量的物理读
不一定的.要看执行计划,具体的说就是表内行数,索引情况等.另外这两个语句的执行结果并不一致,第一个sql 会更新t1中所有记录,在 emp b中无符合条件的更新为null ,第二个语句只更新 满足 exists (select 0 from emp c where c.ename = a.ename) 条件的记录.
首先解决 子查询返回多条的情况.其次 可以写个存储过程来批量更新.
可以通过update方法进行批量修改. sql:update table_name SET age=25; 备注:也可以添加必要的条件,针对固定条件的数据进行批量修改. sql:update table_name SET age=age+1 where name ='zhangsan ';
update table set .不加where条件就是全表更新
不知道你说的批量更新具体是什么操作,一般一个update就是批量的啊
不清楚你问的问题具体是什么.如更新不了,要做提交;一般这样更新,数据量大的时候,增加个计数器,每次到合适数量后,做一次提交,速度会快点.