zoukankan      html  css  js  c++  java
  • Oracle语句优化1

    Oracle语句优化1

    优化就是选择最有效的方法来执行SQL语句。Oracle优化器选择它认为最有效的  
      方法来执行SQL语句。  
       
      1. IS   NULL和IS   NOT   NULL  
      如果某列存在NULL值,即使对该列建立索引也不会提高性能。  
      2. 为不同的工作编写不同的SQL语句块。  
      为完成不同的工作编写一大块SQL程序不是好方法。它往往导致每个任务的结果不优  
      化。若要SQL完成不同的工作,一般应编写不同的语句块比编写一个要好。  
      3. IN   和EXISTS  
      Select   name   from   employee   where   name   not   in   (select   name   from   student);  
      Select   name   from   employee   where   not   exists   (select   name   from   student);  
      第一句SQL语句的执行效率不如第二句。  
      通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配  
      项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果  
      列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待  
      子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN  
      通常查询速度快的原因。  
      4. NOT   运算符  
      Select   *   from   employee   where   salary<>1000;  
      Select   *   from   employee   where   salary<1000   or   salary>1000;  
      第一句SQL语句的执行效率不如第二句,因为第二句SQL语句可以使用索引。  
      5. Order   By   语句  
      Order   By   语句的执行效率很低,因为它要排序。应避免在Order   By   字句中使用表达式。  
      6. 列的连接  
      select   *   from   employee   where   name||department=’ZYZBIOINFO’;  
      select   *   from   employee   where   name=’ZYZ’   and   department=’BIOINFO’;  
      这两个查询,第二句比第一句会快,因为对于有连接运算符’||’的查询,Oracle优化器是不  
      会使用索引的。  
      7. 通配符‘%’当通配符出现在搜索词首时,Oracle优化器不使用索引。  
      Select   *   from   employee   where   name   like   ‘%Z%’;  
      Select   *   from   employee   where   name   like   ‘Z%’;  
      第二句的执行效率会比第一句快,但查询结果集可能会不同。  
      8. 应尽量避免混合类型的表达式。  
      假设字段studentno为VARCHAR2类型  
      有语句select   *   from   student   where   studentno>123;  
      则Oracle会有一个隐含的类型转换。隐含的类型转换可能会使Oracle优化器忽略索引。  
      这时应使用显式的类型转换select   *   from   student   where   studentno=to_char(123)。  
      9.DISTINCT  
            DISTINCT总是建立一个排序,所以查询速度也慢。   

  • 相关阅读:
    C语言成长学习题(八)
    C语言成长学习题(七)
    C语言成长学习题(六)
    C语言成长学习题(五)
    Linux下zookeeper下载与安装教程
    Linux下mongoDB下载与安装
    并发容器之阻塞队列DelayQueue的使用案例及源码分析
    原子操作CAS-最小的线程安全
    ThreadLocal定义、使用案例及源码分析
    mac上使用git命令上传项目工程源码至Github/gitee
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4701879.html
Copyright © 2011-2022 走看看