iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle系列:(31)Oracle SQL语句优化
  • 788
分享到

Oracle系列:(31)Oracle SQL语句优化

2024-04-02 19:04:59 788人浏览 独家记忆
摘要

(01)选择最有效率的表名顺序(笔试常考)       oracle的解析器按照从右到左的顺序处理FROM子句中的表名,     &nb


(01)选择最有效率的表名顺序(笔试常考) 

      oracle的解析器按照从右到左的顺序处理FROM子句中的表名, 

      FROM子句中写在最后的表将被最先处理,

      在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表放在最后,

      如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后。

      例如:查询员工的编号,姓名,工资,工资等级,部门名

      select emp.empno,emp.ename,emp.sal,salgrade.grade,dept.dname
      from salgrade,dept,emp
      where (emp.deptno = dept.deptno) and (emp.sal between salgrade.losal and salgrade.hisal)


      1)如果三个表是完全无关系的话,将记录列名最少的表,写在最后,然后依次类推

      2)如果三个表是有关系的话,将引用最多的表,放在最后,然后依次类推



(02)WHERE子句中的连接顺序(笔试常考)  

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

      例如:查询员工的编号,姓名,工资,部门名  

      select emp.empno,emp.ename,emp.sal,dept.dname
      from emp,dept
      where (emp.deptno = dept.deptno) and (emp.sal > 1500)

 

 

(03)SELECT子句中避免使用*号

      ORACLE在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间

      select empno,ename from emp;


(04)使用DECODE函数来减少处理时间

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


(05)整合简单,无关联的数据库访问


(06)用TRUNCATE替代DELETE

   

(07)尽量多使用COMMIT

      因为COMMIT会释放回滚点


(08)用WHERE子句替换HAVING子句

      WHERE先执行,HAVING后执行

     

(09)多使用内部函数提高sql效率

     

(10)使用表的别名

      salgrade s

     

(11)使用列的别名

      ename e


(12)用索引提高效率

      在查询中,善用索引

      

(13)字符串型,能用=号,不用like

      因为=号表示精确比较,like表示模糊比较 


(14)SQL语句用大写的

      因为Oracle服务器总是先将小写字母转成大写后,才执行

      在eclipse中,先写小写字母,再通过ctrl+shift+X转大写;ctrl+shift+Y转小写


(15)避免在索引列上使用NOT

      因为Oracle服务器遇到NOT后,他就会停止目前的工作,转而执行全表扫描


(16)避免在索引列上使用计算

      WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描,这样会变得变慢 

      例如,SAL列上有索引,

      低效:

      SELECT EMPNO,ENAME
      FROM EMP 
      WHERE SAL*12 > 24000;

      高效:

      SELECT EMPNO,ENAME
      FROM EMP
      WHERE SAL > 24000/12;


(17)用 >= 替代 >

      低效:

      SELECT * FROM EMP WHERE DEPTNO > 3   

      首先定位到DEPTNO=3的记录并且扫描到第一个DEPT大于3的记录

      高效:

      SELECT * FROM EMP WHERE DEPTNO >= 4  

      直接跳到第一个DEPT等于4的记录


(18)用IN替代OR

      select * from emp where sal = 1500 or sal = 3000 or sal = 800;
      select * from emp where sal in (1500,3000,800);


(19)总是使用索引的第一个列

      如果索引是建立在多个列上,只有在它的第一个列被WHERE子句引用时,优化器才会选择使用该索引

      当只引用索引的第二个列时,不引用索引的第一个列时,优化器使用了全表扫描而忽略了索引

      create index emp_sal_job_idex

      on emp(sal,job);

      ----------------------------------

      select *

      from emp  

      where job != 'SALES';      


(20)避免改变索引列的类型,显示比隐式更安全 

      当字符和数值比较时,ORACLE会优先转换数值类型到字符类型 

      select 123 || '123' from dual;







您可能感兴趣的文档:

--结束END--

本文标题: Oracle系列:(31)Oracle SQL语句优化

本文链接: https://www.lsjlt.com/news/52132.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle系列:(31)Oracle SQL语句优化
    (01)选择最有效率的表名顺序(笔试常考)       ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,     &nb...
    99+
    2022-10-18
  • ORACLE之sql语句优化
    今天是四月份最后一天的上班时间,明天就开始假期了!~三天!希望自己能利用这几天好好补一补专业知识,今天晚上开始学习SQL优化课程!常规优化1:尽量避免使用* 列出所有列,因为系统对*解析成列明会消耗一定时间...
    99+
    2022-10-18
  • 列出oracle dbtime得sql语句
    可以根据dbtime 查看数据库得繁忙程度,获取某个快照得awr报告,进行分析 -------------------------------------------------------------...
    99+
    2022-10-18
  • Oracle学习篇之SQL语句的优化
    Oracle学习篇之SQL语句的优化①在使用SELECT语句查询时,不要用“*”代替所有列名,因为这样的写法对Oracle系统来说会存在解析的动态问题。Oracle系统会通过查询数据字典来将“*”转...
    99+
    2022-10-18
  • ORACLE SQL语句优化技术要点解析
    操作符优化: IN 操作符   用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。   但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与...
    99+
    2022-10-18
  • oracle怎么删除序列的sql语句
    要删除Oracle中的序列,可以使用以下SQL语句:```sqlDROP SEQUENCE sequence_name;```其中,...
    99+
    2023-08-25
    oracle sql
  • Oracle 学习之性能优化(一)SQL语句处理
      当向Oracle提交一个sql命令时,Oracle到底做了哪些事情?对这个问题有很好的理解,能帮助你更好的分析sql语句的优化。  执行一条sql语句从开始到结束,需要经历4个步骤:...
    99+
    2022-10-18
  • oracle中对于复杂的SQL语句怎么进行优化
    本篇内容主要讲解“oracle中对于复杂的SQL语句怎么进行优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle中对于复杂的SQL语句怎么进行优化”吧...
    99+
    2022-10-18
  • Oracle中如何优化connect by语句
    Oracle中如何优化connect by语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。执行SQL:SELECT A...
    99+
    2022-10-18
  • 如何调优 Oracle SQL系列文章:查询优化器介绍
    如何调优 Oracle SQL系列文章 第四篇: 查询优化器概念之查询优化器介绍 。 4 查询优化器概念 本章描述了与查询优化器相关的最重要的概念,及其主要组件。 4....
    99+
    2022-10-18
  • Oracle分布式查询语句的性能优化
    分析: 由于优化器无法判断或获得远端表的统计信息,故原执行计划默认会采取把远程表(无论大小)拉到本地再连接的方式执行, 这样如果远程表较大的情况将会比较缓慢,像上述查询耗时在1分钟以上。 ...
    99+
    2022-10-18
  • 如何调优 Oracle SQL系列文章:SQL性能方法论
    如何调优 Oracle SQL系列文章 第二篇: SQL性能方法论。 2 SQL性能方法论 2.1 应用程序设计指南 获得良好SQL性能的关键是在设计应用程序时考虑性能。 2.1.1...
    99+
    2022-10-18
  • oracle sql优化中not in子句包含null返回结果为空的分析
    这篇文章主要介绍“oracle sql优化中not in子句包含null返回结果为空的分析”,在日常操作中,相信很多人在oracle sql优化中not in子句包含null返回结果为空的分析问题上存在疑惑...
    99+
    2022-10-19
  • 如何根据操作系统进程号查看oracle对应的SQL语句内容
    这篇文章主要介绍了如何根据操作系统进程号查看oracle对应的SQL语句内容,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1、  ...
    99+
    2022-10-18
  • Oracle DBA数据库高级工程师(下部)SQL语言+性能优化+数据复制
    套餐介绍:Oracle DBA数据库高级工程师(下部)SQL语言+性能优化+数据复制http://edu.51cto.com/pack/view/id-973.html 描述Oracle DBA数据库高级工...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作