Oracle中使用merge更新表

以scott用户为例
从执行计划(plan)来看,比起普通的update语句,用merge方式效率高

--将dept表的10,20号部门名字更新到emp表去,30,40号部门的保持不变

alter table emp add dname varchar2(50) default 'noname';

merge into emp
using (select dname,deptno from dept where dept.dname in ('ACCOUNTING','RESEARCH')) dept
on (dept.deptno = emp.deptno)
when matched then
  update set emp.dname = dept.dname

接下来看看执行计划

explain plan for

merge into emp
using (select dname,deptno from dept where dept.dname in ('ACCOUNTING','RESEARCH')) dept
on (dept.deptno = emp.deptno)
when matched then
  update set emp.dname = dept.dname;
  
select * from table(dbms_xplan.display());

可以看到,对dept表的访问只有一次,而普通update语句访问了两次

Guess you like

Origin blog.csdn.net/Funky_oaNiu/article/details/110000941