当前位置:  数据库>oracle

Oracle update性能优化

    来源: 互联网  发布时间:2017-06-26

    本文导语: 当执行批量刷新数据时,以前我写过最好是写成merge into,当然还有一种方式,如下: SQL> create table test1 as select * from dba_objects where rownum create table test2 as select * from dba_objects where rownum create unique index ind_t1_object_id on test1(object_id);...

当执行批量刷新数据时,以前我写过最好是写成merge into,当然还有一种方式,如下:

SQL> create table test1 as select * from dba_objects where rownum create table test2 as select * from dba_objects where rownum create unique index ind_t1_object_id on test1(object_id);
 SQL> create unique index ind_t2_object_id on test2(object_id);
 SQL> exec dbms_stats.gather_table_stats(user,'test1');
 SQL> exec dbms_stats.gather_table_stats(user,'test2');
 SQL> set autotrace traceonly
 SQL> update test1 t1
        set t1.object_name = (select t2.object_name
                                from test2 t2
                              where t1.object_id = t2.object_id)
      where exists (select 1 from test2 t3 where t3.object_id = t1.object_id);--
 已更新99行。
 执行计划
----------------------------------------------------------
Plan hash value: 1549919212
 -------------------------------------------------------------------------------------------------
 | Id  | Operation                    | Name            | Rows  | Bytes | Cost (%CPU)| Time    |
 -------------------------------------------------------------------------------------------------
 |  0 | UPDATE STATEMENT            |                  |    99 |  1584 |  304  (33)| 00:00:04 |
 |  1 |  UPDATE                      | TEST1            |      |      |            |          |
 |*  2 |  HASH JOIN SEMI            |                  |    99 |  1584 |    7  (15)| 00:00:01 |
 |  3 |    TABLE ACCESS FULL        | TEST1            |    99 |  1188 |    3  (0)| 00:00:01 |
 |  4 |    INDEX FAST FULL SCAN      | IND_T2_OBJECT_ID |  999 |  3996 |    3  (0)| 00:00:01 |
 |  5 |  TABLE ACCESS BY INDEX ROWID| TEST2            |    1 |    20 |    2  (0)| 00:00:01 |
 |*  6 |    INDEX RANGE SCAN          | IND_T2_OBJECT_ID |    1 |      |    1  (0)| 00:00:01 |
 -------------------------------------------------------------------------------------------------
 Predicate Information (identified by operation id):
 ---------------------------------------------------
    2 - access("T3"."OBJECT_ID"="T1"."OBJECT_ID")
    6 - access("T2"."OBJECT_ID"=:B1)
统计信息
----------------------------------------------------------
          3  recursive calls
        103  db block gets
     
          0  physical reads
      23656  redo size
        559  bytes sent via SQL*Net to client
        922  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          99  rows processed


 SQL> commit;
 SQL> update (select t1.object_name, t2.object_name new_object_name
              from test1 t1, test2 t2
              where t1.object_id = t2.object_id)
    set object_name = new_object_name;
已更新99行。
 执行计划
----------------------------------------------------------
Plan hash value: 1124869545
 -----------------------------------------------------------------------------
 | Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time    |
 -----------------------------------------------------------------------------
 |  0 | UPDATE STATEMENT    |      |    99 |  3168 |    10  (10)| 00:00:01 |
 |  1 |  UPDATE            | TEST1 |      |      |            |          |
 |*  2 |  HASH JOIN        |      |    99 |  3168 |    10  (10)| 00:00:01 |
 |  3 |    TABLE ACCESS FULL| TEST1 |    99 |  1188 |    3  (0)| 00:00:01 |
 |  4 |    TABLE ACCESS FULL| TEST2 |  999 | 19980 |    6  (0)| 00:00:01 |
 -----------------------------------------------------------------------------
 Predicate Information (identified by operation id):
 ---------------------------------------------------
    2 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
统计信息
----------------------------------------------------------
          3  recursive calls
        103  db block gets
     
          0  physical reads
      23736  redo size
        561  bytes sent via SQL*Net to client
        858  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          99  rows processed
 
SQL> commit;

  总结:可以看到,第二种写法比第一种写法少扫描一张表,逻辑读也少了很多。


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)性能调优技术详解
  • Oracle收购TimesTen 提高数据库软件性能
  • 关于提高Oracle数据库性能的四个错误认识
  • 用Oracle动态性能视图采集查询调优数
  • Oracle性能究极优化 上第1/2页
  • 用PHP连mysql比oracle数据库性能好
  • Oracle性能究极优化 下
  • 保持Oracle数据优良性能的技巧分享
  • 100分寻求最优化的连接oracle的java程序,请给我讲出理由,我是初学者,在做项目时不想让连接oracle影响我的程序性能
  • Oracle数据库应用程序性能优化探究
  • oracle 使用递归的性能提示测试对比
  • 善用Oracle表空间设计提升数据库性能
  • Oracle性能究极优化
  • Oracle SQL性能优化系列学习一
  • Oracle SQL性能优化系列学习三
  • Linux平台下如何监控Oracle数据库的性能
  • Oracle SQL性能优化系列学习二
  • 性能陷阱:Oracle表连接中范围比较
  • 基于Oracle的高性能动态SQL程序开发
  • 浅谈Oracle性能优化可能出现的问题
  • 如何保持Oracle数据库的优良性能
  • 解析mysql与Oracle update的区别
  • oracle中UPDATE nowait 的使用方法介绍
  • 发行版Oracle Enterprise Linux 5 Update 4
  • 一个关于JAVA操作oracle数据库时UPDATE权限的问题
  • Oracle批量update和delete
  • sqlserver中delete、update中使用表别名和oracle的区别
  • ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
  • Oracle 的for update行锁语法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE日期相关操作
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE数据库常用字段数据类型介绍
  • Linux系统下Oracle的启动与Oracle监听的启动
  • Oracle 12c的九大最新技术特性介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • ORACLE中DBMS_RANDOM随机数生成包
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3