1、ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.

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

3、SELECT子句中避免使用 ‘ * ‘(ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间)。

4、替换效率:in  --》 exists --》表连接

in的常量列表是优化的(例如:aab019 in (‘20’,’30’)),不用exists替换;in列表相当于or

5、用EXISTS替换DISTINCT

当提交一个包含一对多表信息(比如个人基本信息表和个人参保信息表)的查询时,避免在SELECT子句中使用DISTINCT.一般可以考虑用EXISTS替换

例如:

低效:

select distinct ac01.aac001

from ac02,ac01

where ac02.aac001 = ac01.aac001

and ac02.aae140='31'

and ac01.aab001='100100';

高效:

select ac01.aac001

from ac01

where exists(select 1 from ac02 where aac001 = ac01.aac001

and aae140='31')

and ac01.aab001='100100';

6、尽量用union all替换union

Union会去掉重复的记录,会有排序的动作,会浪费时间。因此在没有重复记录的情况下或可以允许有重复记录的话,要尽量采用union all来关联。

7、使用DECODE函数来减少处理时间

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

例如:

(低效)

select count(1) from ac01 where aab001=’100001’and aac008=’1’;

select count(1) from ac01 where aab001=’100001’and aac008=’2’;

(低效)

Select count(1),aac008

From ac01

Where aab001=’100001’

and aac008 in (’1’,’2’)

group by aac008;

(高效)

select count(decode(aac008,’1’,’1’,null)) zz,

count(decode(aac008,’2’,’1’,null))tx

from ac01

where aab001=’100001’;

特别说明:

group by和order by 都会影响性能,编程时尽量避免没有必要的分组和排序,或者通过其他的有效的编程办法去替换,比如上面的处理办法。

8、在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

因此左表的条件要放在为where后。

转载于:https://www.cnblogs.com/doudingbest/p/7008565.html

Oracle 优化相关相关推荐

  1. oracle默认的优化器,Oracle优化器相关参数设置

    oracle优化器相关参数设置 Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Prod ...

  2. Oracle优化器:星型转换

    Oracle 8i中引入了星型转换(star transformation)的优化器新特性以便更有效地处理星型查询.星型查询语句多用于基于星型模型设计的数据仓库应用中.星型模型的称谓源于该种模型以图形 ...

  3. Oracle优化之表连接方式

    Oracle优化之表连接方式 在Oracle数据库中,两个表之间的表连接方法有排序合并连接.嵌套循环连接.哈希连接和笛卡尔连接四种 1.排序合并连接(sort merge join) 排序合并连接是一 ...

  4. Oracle 优化器_表连接

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

  5. Oracle 优化器

    什么是优化器 优化器是Oracle中的一个核心模块,它的作用是为用户输入的SQL选择一个它计算出来的最高效的执行计划.SQL语句在Oracle中的执行过程如下图所示: 基于规则优化器RBO 基于规则的 ...

  6. Oracle优化07-分析及动态采样-DBMS_STATS 包

    思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 DBMS_STAT ...

  7. Oracle优化07-分析及动态采样-直方图

    思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 概述 获取准确的段 ...

  8. Oracle 优化和性能调整

    Oracle 优化和性能调整 分析评价Oracle数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库用户响应时间又可以分为系统服务时间和用户等待时间两项,即:  数据库用户响应时间=系统 ...

  9. oracle full table scan,ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN

    ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN TABLE FULL SCAN 全表扫描,表示表中所有记录都被访问到.如果表很大, 该操作对查询性 ...

最新文章

  1. oracle驱动程序包的安装失败,Maven 、oracle的jdbc的jar包下载失败
  2. 【响应式Web前端设计】CSS后代选择器和子代选择器
  3. 无法下载linux系统的驱动精灵,有没有LINUX版的 驱动精灵 破系统搞驱动太费劲,尤其笔记本电脑...
  4. 现在很多技术知识点缺乏来龙去脉的介绍
  5. Java设计模式——单例模式的七种写法
  6. C++操作SQLite简明教程
  7. MongoDB索引,性能分析
  8. 【clickhouse】clickhouse 表引擎 之 VersionedCollapsingMergeTree
  9. [转载] python函数分为哪几种_python常用函数
  10. tp5--权限操作(auth类)基本使用
  11. 每周荐书:ES6、虚拟现实、物联网(评论送书)
  12. vim介绍与一些使用方式
  13. [struts2学习笔记] 第五节 编写struts2的action代码
  14. 微软物联网发掘万物互联的价值
  15. java 实现 excel 去重_用java对大量Excel表处理(去重,生成新属性,统计数量)
  16. 熊乃学 计算机,吴谋博士研究成果在权威期刊在线发表
  17. 武汉大学计算机 韩立,文澜学术系列讲座 第135期 武汉大学经济与管理学院韩立宁老师:“Financial Network and Industry Connectedness”...
  18. 6步教你zencart模板制作
  19. origin画图对图片进行缩放时,如何不让文字一同缩放?
  20. Ribbon负载均衡原理,源码解读

热门文章

  1. centos下apache源码编译安装
  2. st edmunds和emmanuel college
  3. intercontenient hotels
  4. NVIDIA NeMo User Guide
  5. video camera in shanghai
  6. 要锻炼二手交换的能力
  7. teams怎么去看谁在说话
  8. 【转】推荐10本C#编程的最佳书籍
  9. 欧拉函数的相关应用 noj欧拉函数求和+noj 最大公约数求和
  10. 开源数学软件zzllrr Mather小乐数学简介Summary