并入和更新的效率对比

  

     

     <>之前以前只考虑,merge  into 只是在特定场合下方便才使用的,今天才发现,merge  into 竟然会比,update 在更新数据时有这么大的改进。   其实呢,merge 进部分的更新和更新也没啥不同的,不同的地方在于使用merge 到后执行计划变了。   赶紧测试看看,但是看到下面的结果,我和我的小伙伴惊呆了~   <>前测试数据:   create  table  test1  as  select  *,得到dba_objects  where  rownum<=10000;——10000条记录   create  table  test2  as  select  *,得到dba_objects;——13438条记录   <>之前更新相同的数据,看看下面merge 成和更新相比性能上有何改进。   测试1:更新   完成,,alter  system  flush  shared_pool;   <>以前系统已更改。   完成,,alter  system  flush  buffer_cache;   <>以前系统已更改。   完成,set  linesize  400年,pagesize  400年   完成,set  autot 跟踪   完成set  timing    完成,update  test1  t1   2,,,,,,set  t1.object_name =3,,,,,,,,,,,(select  t2.object_name   4,,,,,,,,,,,,,,得到test2  t2   5,,,,,,,,,,,,,where  t2.object_id =, t1.object_id);   <>之前已更新10000行。   <>之前已用时间:,,00:25.24,00:,   <>前执行计划   ----------------------------------------------------------   Plan  hash 价值:,3883393169   
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  | |,Id 还以为;Operation ,,,,,,,,, |, Name , |, Rows , |, Bytes  |, Cost  (% CPU) |, Time ,,, |
  ----------------------------------------------------------------------------
  |,,,0,|,UPDATE  STATEMENT ,, |,,,,,,, |,, 9606, |,,, 741 k |,,, 518 k , (2) |, 01:43:46  |
  |,,,1,|,,UPDATE ,,,,,,,,,,, |, TEST1  |,,,,,,, |,,,,,,, |,,,,,,,,,,,, |,,,,,,,,, |
  |,,,2,|,,,TABLE  ACCESS 全部|,TEST1  |,, 9606, |,,, 741 k |,,,, 40,,, (0) |, 00:00:01  |
  | *,,3,|,,,TABLE  ACCESS 全部|,TEST2  |,,, 167, |, 13193, |,,,, 53岁,,,(0)|,00:00:01  |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  <>以前Predicate 方式;(identified  by  operation  id):   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   <>之前,,,3,安康;过滤器(干净自己的“T2" OBJECT_ID"=: B1)   <>之前注意   -----   ,,今天早上,dynamic  sampling  used  for 却;能够statement (要求等级=4)   
统计信息
  ----------------------------------------------------------
  ,,,,,,,234,,recursive 调用
  ,,,,,10665,,db  block 
  ,,
  ,,,,,,,335,physical 读取
  ,,,1631056,,redo 大小
  ,,,,,,,685,,bytes  sent  via  SQL * Net 用客户端
  ,,,,,,,705,,bytes  received  via  SQL * Net 得到客户
  ,,,,,,,,,3,,SQL * Net  roundtrips /得到客户
  ,,,,,,,,,17日,sorts (内存)
  ,,,,,,,,,0,,sorts (磁盘)
  ,,,,,10000,,rows 处理
  测试2:merge 
  完成,,alter  system  flush  shared_pool; 
  <>以前系统已更改。   <>之前已用时间:,,00:00:,00.33   完成,,alter  system  flush  buffer_cache;   <>以前系统已更改。   <>之前已用时间:,,00:00:,00.11   完成,merge  into  test1  t1   2,才能using  test2  t2   ,,3,,,(=t1.object_id  t2.object_id)   4,才能when  matched 然后   5,,,,,,update  set  t1.object_name =, t2.object_name;   
 10000,行已合并。
  <>之前已用时间:,,00:01.14,00:,   <>前执行计划   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

并入和更新的效率对比