Oracle优化SQL执行效能的几点常识

  • 来源: 互联网 作者: rocket   2008-03-19/14:13
  • 我想大家都知道,优化数据库的执行效能是一个专门的技术,Oracle有这方面专门的图书,如Oracle Tunning Tec.本文只涉及了很少的一部分--优化SQL的一些小常识。

    1)不知大家是否喜欢使用‘NOT IN’这样的操作,如果是,那尽量使用(NOT) EXISTS 替代

    例子:
    语句1

    SELECT dname, deptno

    FROM dept

    WHERE deptno NOT IN

    (SELECT deptno FROM emp);

    语句2

    SELECT dname, deptno

    FROM dept

    WHERE NOT EXISTS

    (SELECT deptno

    FROM emp

    WHERE dept.deptno = emp.deptno);

    明显的,2要比1的执行性能好很多

    因为1中对emp进行了full table scan,这是很浪费时间的操作。而且1中没有用到emp的index,

    因为没有where子句。而2中的语句对emp进行的是range scan。



    2)在海量查询时尽量少用格式转换。

    如用

    WHERE a.order_no = b.order_no

    而不用

    WHERE TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)

    = TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)




    3)查询海量数据是,可以使用optimizer hints,例如/*+ORDERED */



    SELECT /*+ FULL(EMP) */ E.ENAME

    FROM EMP E

    WHERE E.JOB = 'CLERK';

    而不是

    SELECT E.ENAME

    FROM EMP E

    WHERE E.JOB || '' = 'CLERK';


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多