ORACLE SQL性能优化系列 (六)

原创 2003年08月01日 19:00:00

20.       用表连接替换EXISTS<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

     通常来说 , 采用表连接的方式比EXISTS更有效率

      SELECT ENAME

      FROM EMP E

      WHERE EXISTS (SELECT ‘X’

                      FROM DEPT

                      WHERE DEPT_NO = E.DEPT_NO

                      AND DEPT_CAT = ‘A’);

 

     (更高效)

      SELECT ENAME

      FROM DEPT D,EMP E

      WHERE E.DEPT_NO = D.DEPT_NO

      AND DEPT_CAT = ‘A’ ;

 

(译者按: RBO的情况下,前者的执行路径包括FILTER,后者使用NESTED LOOP)

 

21.       EXISTS替换DISTINCT

当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换

 

例如:

低效:

    SELECT DISTINCT DEPT_NO,DEPT_NAME

    FROM DEPT D,EMP E

    WHERE D.DEPT_NO = E.DEPT_NO

高效:

    SELECT DEPT_NO,DEPT_NAME

    FROM DEPT D

    WHERE EXISTS ( SELECT ‘X’

                    FROM EMP E

                    WHERE E.DEPT_NO = D.DEPT_NO);

 

  EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.

 

22.       识别低效执行SQL语句

 

用下列SQL工具找出低效SQL:

 

SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,

        ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,

        ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,

        SQL_TEXT

FROM   V$SQLAREA

WHERE  EXECUTIONS>0

AND     BUFFER_GETS > 0

AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8

ORDER BY 4 DESC;

    

(译者按: 虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法)

 

23.       使用TKPROF 工具来查询SQL性能状态

 

SQL trace 工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中. 这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等.这些数据将可以用来优化你的系统.

 

设置SQL TRACE在会话级别: 有效

 

  ALTER SESSION SET SQL_TRACE TRUE

 

设置SQL TRACE 在整个数据库有效仿, 你必须将SQL_TRACE参数在init.ora中设为TRUE, USER_DUMP_DEST参数说明了生成跟踪文件的目录

 

(译者按: 这一节中,作者并没有提到TKPROF的用法, SQL TRACE的用法也不够准确, 设置SQL TRACE首先要在init.ora中设定TIMED_STATISTICS, 这样才能得到那些重要的时间状态. 生成的trace文件是不可读的,所以要用TKPROF工具对其进行转换,TKPROF有许多执行参数. 大家可以参考ORACLE手册来了解具体的配置. )

oracle性能优化三——数据库系统优化之toad监控

在我上一篇博客《oracle性能优化二——操作系统优化》中介绍了如何操作系统优化,本文将介绍如何使用toad监控数据库的优化。      通过合理的分配内存大小,合理的设置表空间体系和内部空间参数。可...
  • tang_huan_11
  • tang_huan_11
  • 2015年09月24日 14:28
  • 4323

高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》

充分利用索引 索引的限制 1. 索引对不等号和NOT的限制   如果WHERE条件中出现!=或者 Oracle 10g起,在基于CBO的优化器模式下Oralce会进行自动优...
  • holandstone
  • holandstone
  • 2016年05月21日 23:36
  • 1774

ORACLE SQL性能优化汇总

ORACLE SQL性能优化汇总:SQL语句共享、ORACLE SQL 多表联合查询、where语句条件顺序、ORACEL多表连接查询指定表别名alias等...
  • tianwei7518
  • tianwei7518
  • 2015年03月11日 23:41
  • 957

Oracle 11g 中SQL性能优化新特性之SQL性能分析器(SQLPA)

本文通过简单的例子,完整而详细的说明了oracle11g中新特点——SQLPA的使用,该功能在实际工作中有着非常广泛的实用价值,尤其在数据库升级和迁移过程中,非常有用,现整理记录于此,以供大家学习和今...
  • LHDZ_BJ
  • LHDZ_BJ
  • 2015年12月09日 16:48
  • 817

Oracle性能优化图文详解——利用第三方工具

开发中或者是正在运行的系统性能显著恶化的场合,需要进行性能优化。当听到性能优化时,有些人可能会感觉到非常困难,如果使用OB的话,通过使用索引或者内存等可以非常简单的进行性能优化。这篇文章将要介绍怎样使...
  • xiaohaiyaoer
  • xiaohaiyaoer
  • 2013年07月17日 16:20
  • 2367

Oracle分页查询性能优化

对于数据库中表的数据的 Web 显示,如果没有展示顺序的需要,而且因为满足条件的记录如 此之多,就不得不对数据进行分页处理。常常用户并不是对所有数据都感兴趣的,或者大部分情 况下,他们只看前几页。 通...
  • sunansheng
  • sunansheng
  • 2016年09月19日 16:10
  • 13493

Oracle查询性能优化(面试题:数据库查询优化也是常问的问题)

原则一:注意WHERE子句中的连接顺序:  ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WH...
  • hxpjava1
  • hxpjava1
  • 2017年02月21日 11:40
  • 1143

Oracle 数据库性能优化3日实战(企业培训)

课程名称一: Oracle性能优化及调整 课程时长 1天 课程深度: 高级 上机实验: 10%-30% 授课对象: Oracle开发人员、Oracle数据库管理人员,应用程序开发人员 课程描述...
  • robinson_0612
  • robinson_0612
  • 2017年04月05日 11:49
  • 2320

ORACLE SQL性能优化系列 (六)

20. 用表连接替换EXISTS 通常来说 , 采用表连接的方式比EXISTS更有效率 SELECT ENAME FROM EMP E WHERE EXISTS (SELECT ‘X’...
  • zhaowei_ha
  • zhaowei_ha
  • 2014年01月21日 10:13
  • 481

ORACLE SQL性能优化系列 (六 )

ORACLE SQL性能优化系列 (六 ) 出处 http://www.dbasupport.com  20. 用表连接替换EXISTS  通常来说 , 采用表连...
  • vip_ljq
  • vip_ljq
  • 2014年06月01日 00:51
  • 311
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE SQL性能优化系列 (六)
举报原因:
原因补充:

(最多只允许输入30个字)