--选择最有效率的表名顺序:
  Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,
  在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,
  那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。
--WHERE子句中的连接顺序: 
  Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
 
--select 子句中避免使用*
  Oracle在解析的过程中, 会将‘*’依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间
 
--用Where子句替换HAVING子句
  HAVING 只会在检索出所有记录之后才对结果集进行过滤,而Where子句在检索时过滤
  on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后
 
--用EXISTS替代IN、用NOT EXISTS替代NOT IN
  在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率。
  在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。
  为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。
 
--SQL语句用大写的;因为Oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。

--在Java代码中尽量少用连接符“+”连接字符串。
  一个'+'就会产生一个新对象
 
--用>=替代>:
  高效:SELECT * FROM EMP WHERE DEPTNO >=4 低效: SELECT * FROM EMP WHERE DEPTNO >3
  两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记 录。
 
--避免在索引列上使用NOT、IS NULL和IS NOT NULL:
  NOT会产生在和在索引列上使用函数相同的影响。当Oracle“遇到”NOT、IS NULL和IS NOT NULL,他就会停止使用索引转而执行全表扫描。
 
--避免在索引列上使用计算。
  WHERE子句中,如果索引列是函数的一部分。优化器将不使用索引而使用全表扫描。
 
  避免对索引字段进行计算操作
  避免在索引字段上使用not,<>,!=
  避免在索引列上使用IS NULL和IS NOT NULL
  避免在索引列上出现数据类型转换
  避免在索引字段上使用函数
  避免建立索引的列中使用空值。

--用UNION替换OR (适用于索引列):
  通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果。对索引列使用OR将造成全表扫描。
  注意,以上规则只针对多个索引列有效。如果有 column没有被索引,查询效率可能会因为你没有选择OR而降低。

--总是使用索引的第一个列: 
  如果索引是建立在多个列上,只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引。
  这也是一条简单而重要的规则,当仅引用索引的第二个列时,优化器使用了全表扫描而忽略 了索引。

--‘||'是字符连接函数、‘+'是数学函数。就象其他函数那样, 停用了索引。

--相同的索引列不能互相比较,这将会启用全表扫描。

--模糊查询like
 %yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%。

--不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)否则会使索引无效,产生全表扫描
 使用    :SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;
 不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = ‘7369’

--LEFT JOIN 和 inner join
 是否真的需要left join,否则选用inner join 来减少不必要的数据返回。
 连表查询n*m,那么减少基础表的记录数目可以有效的提高效率(把查询条件放入到基础表先进行过滤,然后在进行连接)
 select top 500 * from
(select  * from  [dbo].[table1] where (ss between @a1 and @a2)) a
 LEFT JOIN  dbo.[table2] ON a.m = dbo.[table2].n
 
--应避免在where子句中使用or来连接条件,否则引擎将放弃使用索引而进行全表扫描
--应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:trim()

oracle 优化相关的更多相关文章

  1. Oracle优化的几个简单步骤

    数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...

  2. Oracle优化-SQL_TRACE

    思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...

  3. Oracle 优化器

    http://blog.csdn.net/it_man/article/details/8185370一.优化器基本知识   Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执 ...

  4. oracle优化器使用(oracle11g)

    一:优化器介绍 优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL ...

  5. Oracle 优化器_表连接

    概述 在写SQL的时候,有时候涉及到的不仅只有一个表,这个时候,就需要表连接了.Oracle优化器处理SQL语句时,根据SQL语句,确定表的连接顺序(谁是驱动表,谁是被驱动表及 哪个表先和哪个表做链接 ...

  6. ORACLE优化器RBO与CBO介绍总结

    RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基 ...

  7. Oracle优化总结

    本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案.关键词 ORACLE数据库 环境调整 ...

  8. js DOM优化相关探索

    我在这尝试两个方面:-->DOM与js -->DOM与浏览器 (最近在秒味视频上学到不少,哈哈哈) 一.DOM与js 1.js与dom的交互问题 频繁的与dom交互,是一件浪费时间与金钱的 ...

  9. MySql性能优化相关

    原来使用MySql处理的数据量比较少,小打小闹的,没有关注过性能的问题.最近要处理的数据量飙升,每天至少20W行的新增数据,导致MySql在性能方面已经是差到不可用的地步了,必须要重视MySql的优化 ...

随机推荐

  1. PAT 1044. Shopping in Mars

    #include <cstdio> #include <cstdlib> #include <vector> #include <climits> #i ...

  2. BestCoder Round #92

    这里是逢比赛必挂的智障选手ysf…… 不知道是因为自己菜还是心态不好……也许是后者吧,毕竟每次打比赛的时候都会很着急.lrd说我打比赛的功利性太强,想想确实是这样. 昨天打完之后自觉身败名裂没敢写出来 ...

  3. 记录开发Nodejs c++ addon的一些经验(四、electron)

    如果我们要在electron里使用我们开发的addon,那么直接使用是不行的. 官方的解释是:Electron 同样也支持原生模块,但由于和官方的 Node 相比使用了不同的 V8 引擎,如果你想编译 ...

  4. 纯css模仿天猫首页

    <style> *{margin:0;padding:0} li{list-style:none} a{text-decoration:none} #wrapper{font: 12px/ ...

  5. Android进入页面开始就自动弹出软键盘

    EditText edittext = (EditText)findViewById(R.id.edittext);   edittext.setFocusable(true);   edittext ...

  6. Hush Framework框架配置(续) 转自《Android和PHP最佳实践》官方站

    图书资源下载 Xampp 开发环境下载:http://pan.baidu.com/share/link?shareid=531771&uk=773037279 微博实例完整源码包下载:http ...

  7. 第三次Scrum

    1.小组成员 周 斌舒 溢许嘉荣唐 浩黄欣欣廖帅元刘洋江薛思汝 2.小组第三次冲刺完成情况 github仓库小组的第三次任务是完成体系结构环境图和系统原型图.在体系结构设计中,分为上级系统----把目 ...

  8. css3 background-sizing 属性,捎带 background-repeat 属性

    background-sizing: contain: 在指定大小的容器内把图像按照图像本身长宽比扩展到最大尺寸,有可能有留白 cover: 在指定大小的容器内,把图像按照图像本身的长宽比扩展到足够大 ...

  9. less @import and extend及mixin详解

    在less中,通过 @import (keyword) "filename"的方式引入其他的文件,这个keyword可以是以下6种: referrence referrence这个 ...

  10. dctcp-ns2-patch

    diff -crbB ns-allinone-2.35/ns-2.35/queue/red.cc ns-2.35/queue/red.cc *** ns-allinone--- :: --- ns-- ...