zoukankan      html  css  js  c++  java
  • Oracle 优化相关

    1、ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.

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

    3、SELECT子句中避免使用 ‘ * ‘(ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间)。

    4、替换效率:in  --》 exists --》表连接

         in的常量列表是优化的(例如:aab019 in (‘20’,’30’)),不用exists替换;in列表相当于or

    5、用EXISTS替换DISTINCT

     当提交一个包含一对多表信息(比如个人基本信息表和个人参保信息表)的查询时,避免在SELECT子句中使用DISTINCT.一般可以考虑用EXISTS替换 

     例如: 

    低效: 

    select distinct ac01.aac001

    from ac02,ac01

    where ac02.aac001 = ac01.aac001

    and ac02.aae140='31'

    and ac01.aab001='100100'; 

    高效: 

    select ac01.aac001

    from ac01

    where exists(select 1 from ac02 where aac001 = ac01.aac001

    and aae140='31')

    and ac01.aab001='100100';

    6、尽量用union all替换union

    Union会去掉重复的记录,会有排序的动作,会浪费时间。因此在没有重复记录的情况下或可以允许有重复记录的话,要尽量采用union all来关联。

    7、使用DECODE函数来减少处理时间

    使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 

    例如:

    (低效)

    select count(1) from ac01 where aab001=’100001’and aac008=’1’; 

    select count(1) from ac01 where aab001=’100001’and aac008=’2’;

    (低效)

    Select count(1),aac008

     From ac01

    Where aab001=’100001’

      and aac008 in (’1’,’2’)

    group by aac008;

    (高效)

    select count(decode(aac008,’1’,’1’,null)) zz,

    count(decode(aac008,’2’,’1’,null))tx

    from ac01

    where aab001=’100001’;

    特别说明:

    group by和order by 都会影响性能,编程时尽量避免没有必要的分组和排序,或者通过其他的有效的编程办法去替换,比如上面的处理办法。

    8、在使用left jion时,on和where条件的区别如下:

    1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

    因此左表的条件要放在为where后。

  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/doudingbest/p/7008565.html
Copyright © 2011-2022 走看看