首页 > 新闻

ORACLE多表查询优化方案

时间:2009-12-08 07:06:26  作者:  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
ORACLE采取自下而上的顺序解析WHERE子句,依据这个原理,表其间的联接务须写在其余WHERE条件事前, 那些可以过滤掉最大数量记要的条件务须写在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’;

  着重点关切三:SELECT子句中避免运用 ‘ * ‘ .着重点关切

  当你想在SELECT子句中列出全部的COLUMN时,施用动态SQL列摘引 ‘*’ 是一个便利的步骤.不幸的是,这是一个十分低效的步骤. 实质上,ORACLE在解析的过程中, 会将’*’ 顺次转换成全部的列名, 这个工作是透过查询数据字典完成的, 这象征将消耗更多的时间.

  7. 减小访问数据库的次数

  应施行每条SQL话语时, ORACLE在内部实施了许多工作: 解析SQL话语, 预算目录的利用率, 绑定变量 , 读数据块之类. 有鉴于此, 减小访问数据库的次数 , 就能事实上减小ORACLE的工作量.

  比如,

  以次有三种步骤可以检索出雇员号即是0342或0291的员工.

  步骤一 (最低效)

  SELECT EMP_NAME , SALARY , GRADE

  FROM EMP

  WHERE EMP_NO = 342;

  SELECT EMP_NAME , SALARY , GRADE

  FROM EMP

  WHERE EMP_NO = 291;

  步骤二 (次低效)

  DECLARE

  CURSOR C一 (E_NO NUMBER) IS

  SELECT EMP_NAME,SALARY,GRADE

  FROM EMP

  WHERE EMP_NO = E_NO;

  BEGIN

  OPEN C一(342);

  FETCH C一 INTO …,..,.. ;

  OPEN C一(291);

  FETCH C一 INTO …,..,.. ;

  CLOSE C一;

  END;

本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception

步骤三 (高效率)

  SELECT A.EMP_NAME , A.SALARY , A.GRADE,

如果您需转载 ORACLE多表查询优化方案,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门