oracle sql优化规范之一

温故而知新
规则1 在查询语句中不允许使用SELECT *

        使用SELECT时,不允许使用SELECT *,要写出具体的列名。目的是防止数据字段增加后的影响。


规则2 使用多表连接时要使用表的别名明确的标明是哪个表中的列

        使用表的别名明确的告诉oracle是哪个表上的列,这样减少了oracle的工作,提高了效率。

  例如:

避免使用SELECTempno,dname

  FROM emp,dept

                      WHERE emp.deptno=dept.deptno

建议使用SELECT e.empno,d.dname

FROM emp e,dept d

     WHERE e.deptno=d.deptno

规则3 注意where字句写法,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

(低效)

SELECT …

FROM EMP E

WHERE  SAL > 2000

AND    JOB = ‘MANAGER’

AND    25 < (SELECT COUNT(*) FROM EMP

             WHERE MGR=E.EMPNO);

(高效)

SELECT …

FROM EMP E

WHERE 25 < (SELECT COUNT(*)FROM EMP

             WHERE MGR=E.EMPNO)

AND    SAL > 2000

AND    JOB = ‘MANAGER’;


规则4尽量将记录少的表放在FROM字句最后面,做为基础表

尽量将记录少的表放在FROM字句的最后面,作为基础表。(ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表)将被最先处理)

例如:

     表 TAB1 16,384 条记录

     表 TAB2 1      条记录

     选择TAB2作为基础表(最好的方法)

     select count(*) from tab1,tab2   执行时间0.96秒

    选择TAB1作为基础表(不佳的方法)

     select count(*) from tab2,tab1   执行时间26.09秒

规则5 两个结果集若没有重复记录用union all替换union
使用UNION的两个结果集中没有重复的记录,尽量使用UNION ALL替换UNION。因为UNION将对结果集中记录进行排序操作。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值