• Oracle SQL语句之常见优化方法总结--不定更新


    1、SQL语句尽量用大写的;

     因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。

    2、WHERE子句中的连接顺序: 

     ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他

    WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

    3、SELECT子句中避免使用 * : 

     ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字

    典完成的, 这意味着将耗费更多的时间。

    4、减少访问数据库的次数(使用游标等等): 

     ORACLE在内部执行了许多工作: 解析SQL语句,估算索引的利用率,绑定变量,读数据块等。

    5、避免使用耗费资源的操作: 

     带有DISTINCT、UNION、MINUS、INTERSECT、ORDER BY的SQL语句会启动SQL引擎执行

    耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作,而其他的至少需要执行两次排序。

    通常,带有UNION、MINUS、INTERSECT的SQL语句都可以用其他方式重写。

     如果数据库的SORT_AREA_SIZE调配得好,使用UNION,MINUS,INTERSECT也是可以考虑。 

    6、优化GROUP BY: 

     提高GROUP BY 语句的效率,可以通过将不需要的记录在GROUP BY之前过滤掉。

    下面两个查询返回相同结果但明显第二个效率更高。 

    低效:

    1 SELECT JOB,AVG(AGE) FROM TEMP 
    2  GROUP BY JOB HAVING JOB = 'STUDENT' OR JOB = 'MANAGER';

    高效:

    SELECT JOB,AVG(AGE) FROM EMP 
    WHERE JOB = 'STUDENT' OR JOB = 'MANAGER' GROUP BY JOB;

    7、用>=替代>:

    高效: 

    SELECT * FROM TEMP WHERE ID >=4;

    低效:

    SELECT * FROM TEMP WHERE ID >3;

    原因:前者DBMS将直接跳到第一个ID等于4的记录而后者将首先定位到ID=3的记录并且向前扫描到第一个ID大于3的记录。  

    8、避免在索引列上使用计算: 

    低效:

    SELECT … FROM TEMP WHERE SAL * 12 > 25000;

    高效:

    SELECT … FROM TEMP WHERE SAL > 25000/12;
  • 相关阅读:
    回顾2018,展望2019
    NLog日志框架使用探究-1
    基于NetMQ的TLS框架NetMQ.Security的实现分析
    鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(二)
    鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(一)
    鸟哥的Linux私房菜笔记第四章
    ThinkPHP5.1 + tufanbarisyildirim 解析apk
    Java核心技术第八章——泛型程序设计(1)
    Java核心技术第五章——2.Object类
    Java核心技术第五章——1.类、超类、子类(2)
  • 原文地址:https://www.cnblogs.com/smellpawn/p/10790734.html
Copyright © 2020-2023  润新知