• oracle查询优化


    1. 排序合理查询条件

    Oracle自下而上分析顺序WHERE收条,从优化性能的角度。它建议,这些条件将能够过滤掉大量行书写的WHERE在条款结束,

    之间的连接条件置于其它WHERE子句之前,即对易排查的条件先做推断处理。这样在过滤掉尽可能多的记录后再进行等值连接,能够提高检索效率。

    比如:

    SELECT empno, ename, job, sal, dept.deptno, dname 

    FROM emp, dept 

    WHERE emp.deptno = dept.deptno AND emp.deptno = 20;

    要比下述语句的查询效率高一些:

    SELETE empno, ename, job, sal, dept.deptno, dname

    FROM emp, dept

    WHERE emp.deptno = 20 AND emp.deptno = dept.deptno;

    2.连接中使用表别名

    在进行连接查询时,建议在SQL语句中使用表的别名, 并把别名前缀与每一个字段上。

    这样能够降低解析的时间,并可避免因字段名存在歧义(使用多个

    表中出现的同名字段)而导致的语法错误。比例如以下述语句:

    SELECT e.empno, e.ename, e.job, e.sal, e.deptno, d.name

    FROM emp e, dept d

    WHERE e.deptno = d.deptno AND e.deptno = 20;

    3.用EXISTS替换DISTINCT

    在进行一对多关系的表间连接查询时,假设要剔除结果中的反复行。能够考虑使用EXISTS(结合子查询)替换DISTINCT。

    比如:

    SELECT deptno, dname FROM dept d WHERE EXIST (SELECT 'y' FROM emp e WHERE e.deptno = d.deptno);

    4.用WHERE替换HAVING

    因为SELECT语句的运行顺序为:先WHERE子句, 在GROUP BY 子句。 然后SELECT查询。 再后HAVINT子句,最后是ORDER BY子句,因此在进行分组

    查询时,假设过滤条件不涉及分组计算,则应该使用WHERE语句替换HAVING指定的过滤条件

    比如:

    SELECT deptno, avg(sal) FROM emp

    WHERE deptno IN (10, 20)

    GROUP BY deptno;

    效率会高于以下

    SELECT deptno, avg(sal) FROM emp

    GROUP BY deptno

    HAVING deptno IN (10, 20);

    当然。 假设分组查询的过滤条件设计分组计算,就仅仅能在HAVING子句中指定了。

    5.使用系统函数

    系统函数毕其实数据库厂商“专业人士”解。相对更可靠


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    windows 安装 make
    go lang AES 加密
    Microsoft .NET Framework 5.0
    Prometheus+Grafana+Alertmanager实现告警推送教程 ----- 图文详解
    ElasticSearch实战系列九: ELK日志系统介绍和安装
    1024快乐,加班使我快乐,福报如圣光醍醐灌顶!
    react-redux笔记
    (转)Vuex、Flux、Redux、Redux-saga、Dva、MobX
    React笔记
    SQLServer设置客户端使用IP地址登录
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4852194.html
Copyright © 2020-2023  润新知