首页 > 新闻

ORACLE多表查询优化方案

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


  B.EMP_NAME , B.SALARY , B.GRADE

  FROM EMP A,EMP B

  WHERE A.EMP_NO = 342

  AND B.EMP_NO = 291;

  注意:

  在SQL*Plus , SQL*Forms和Pro*C中从新设立ARRAYSIZE参数, 可以增多历次数据库访问的检索数据量 ,提议值为200.

  着重点关切四:施用DECODE函数来减小处置时间.着重点关切

  应用DECODE函数可以避免反复扫描雷同记要或反复联接雷同的表.

  比如:

  SELECT COUNT(*),SUM(SAL)

  FROM EMP

  WHERE DEPT_NO = 0020

  AND ENAME LIKE ‘SMITH%’;

  SELECT COUNT(*),SUM(SAL)

  FROM EMP

  WHERE DEPT_NO = 0030

  AND ENAME LIKE ‘SMITH%’;

  你可以用DECODE函数高效率地失去雷同结果

  SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT,

  COUNT(DECODE(DEPT_NO,0030,’X’,NULL)) D0030_COUNT,

  SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,

  SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL

  FROM EMP WHERE ENAME LIKE ‘SMITH%’;

  相仿的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中.

  着重点关切五: 剔除重复记录.着重点关切

  最高效率的剔除重复记录步骤 ( 由于应用了ROWID)

  DELETE FROM EMP E

  WHERE E.ROWID >; (SELECT MIN(X.ROWID)

  FROM EMP X

  WHERE X.EMP_NO = E.EMP_NO);

  着重点关切六: 用TRUNCATE代替DELETE.着重点关切

  应剔除表中的记要时,在通常情况下, 来滚段(rollback segments ) 用于寄放可以被回复的信息. 如其你没COMMIT事宜,ORACLE会将数据回复到剔除事先的状态(正确地说是回复到实施剔除下令先期的景况)

  而应施用TRUNCATE时, 来滚段不再寄存任何可被回复的信息.应下令运作后,数据不能被回复.因而很少的资源被调用,执行时间也能很短.

  (译员按: TRUNCATE只在剔除全表实用,TRUNCATE是DDL不是DML)

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