[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

Oracle语句优化规则汇总(2)

作者: Peak Wong,  出处:IT专家网, 责任编辑: 李书琴, 
2008-02-15 11:52
  

  【IT专家网独家】1. WHERE子句中的连接顺序。

  ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

  例如:

  (低效,执行时间156.3秒)

  SELECT …
  FROM EMP E
  WHERE SAL > 50000
  AND JOB = ‘MANAGER’
  AND 25 < (SELECT COUNT(*) FROM EMP
  WHERE MGR=E.EMPNO);

  (高效,执行时间10.6秒)

  SELECT …
  FROM EMP E
  WHERE 25 < (SELECT COUNT(*) FROM EMP
  WHERE MGR=E.EMPNO)
  AND SAL > 50000
  AND JOB = ‘MANAGER’;

  2. SELECT子句中避免使用 ‘ * ’

  当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法。不幸的是,这是一个非常低效的方法。 实际上,ORACLE在解析的过程中, 会将‘*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。

  3. 减少访问数据库的次数

  当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等。 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量。

  例如,以下有三种方法可以检索出雇员号等于0342或0291的职员。

  方法1 (最低效)

  SELECT EMP_NAME , SALARY , GRADE
  FROM EMP
  WHERE EMP_NO = 342;
  SELECT EMP_NAME , SALARY , GRADE
  FROM EMP
  WHERE EMP_NO = 291;

共2页。 1 2 :
  • 本文关键词:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅