1.1 oracle里的优化器

RBO(Rule-Based-Optinizer):基于规则的优化器

CBO(Cost-Based-Optinizer): 基于成本的优化器

SQL语句执行过程

待执行的sql → 解析 (语法,语义,权限检查)→ 查询转换 → 优化器(RBO/CBO)→ 执行计划 → 实际执行 → 结果

1.1.1 基于规则的优化器 RBO

oracle会在代码中事先给各种执行路径定一个等级,共有15个等级,其中等级1 执行率最高,RBO会从中选择等级值低的来执行

OLTP:可理解为平常的增删查改,rowid的访问方式效率最高

OLAP:数据仓库的核心 如 hive

RBO 从oracle 10g开始不被支持,但相关实现仍存在,可以继续使用

Oracle 索引组织表(IOT):http://blog.csdn.net/dnnyyq/article/details/5195472

下列情况不会使用RBO:

  • 目标SQL设计IOT
  • 对象有分区表
  • 使用了并行查询或者并行DML
  • 使用了星型链接
  • 使用了哈希连接
  • 索引快速全扫描
  • 使用了函数索引

很难对RBO选择进行调整 其中 RULE Hint 和 DRIVING_SITE Hint 例外,他们可以在RBO下使用,并且不自动启用CBO

手动调整RBO

1.等价改写目标SQL where条件中NUMBER 和 DATE 类型加0 varchar2和char || ‘’  加上空字符

2.调整相关对象在数据字典缓存顺序 适用于有等级值相同的情况

create index idx_mgr_temp on emp_temp(mgr);
create index idx_deptno_temp on emp_temp(deptno);

alter session set optimizer_mode='RULE';
SET AUTOTRACE TRACEONLY EXPLAIN;

select * from emp_temp where mgr >100 and deptno >100;

select * from emp_temp where mgr >100 and deptno +0>100;

可以删除索引再创建索引来修改在数据字典中的缓存顺序,验证执行计划修改

RBO会按照从右往左的顺序决定谁是驱动表

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

  1. Oracle性能优化之 Oracle里的优化器

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

  2. Oracle中CBO优化器简介

    Oracle中CBO优化器简介 Oracle数据库中的优化器是SQL分析和执行的优化工具.它负责制定SQL的执行计划,也就是它负责保证SQL的执行计划的效率最高,比如优化器决定Oracle以什么样的方 ...

  3. Oracle 查看相关优化器参数

    select x.ksppinm name, y.ksppstvl value, y.ksppstdf isdefault, decode(bitand(y.ksppstvf, 7), 1, 'MOD ...

  4. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  5. oracle优化器使用(oracle11g)

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

  6. Oracle优化器

    本文参照:https://www.cnblogs.com/Dreamer-1/p/6076440.html 读优化器之前建议先读: https://www.cnblogs.com/zhougongji ...

  7. Oracle 优化器

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

  8. 选用适合的ORACLE优化器

    ORACLE的优化器共有3种: a.  RULE (基于规则)   b. COST (基于成本)  c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER ...

  9. 读书笔记-《基于Oracle的SQL优化》-第一章-3

    优化器: 1.优化器的模式: 用于决定在Oracle中解析目标SQL时所用优化器的类型,以及决定当使用CBO时计算成本值的侧重点.这里的“侧重点”是指当使用CBO来计算目标SQL各条执行路径的成本值时 ...

随机推荐

  1. Libevent 事件循环(2)---事件被加入激活队列

    由Libevent 事件循环(1) 在上文中我们提到了libevent 事件循环event_dispatch 的大致过程,以epoll为例,我们看一下事件被如何加入激活队列. //在epoll_dis ...

  2. python面向对象其他相关-异常处理-反射

    1.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象   2.issubclass(sub, super) 检查sub类是否是 super 类的派生类 n1 = 10 ...

  3. vue.js初学,笔记1,安装

    最近学习vue.js,下面是笔记: 说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事.来自官网:"这 ...

  4. ASP.NET Core远程调试

    关于ASP.NET Core远程调试的具体做法可参考微软文档——Remote Debug ASP.NET Core on a Remote IIS Computer in Visual Studio ...

  5. backbone与require的共存问题解决

    如果向下面那样直接列出script标签可能会出现错误,   <script type="text/javascript" src="/dep/jquery-1.11 ...

  6. ArrayList与数组间的转换

    关键句:String[] array = (String[])list.toArray(new String[size]); public class Test { public static voi ...

  7. myeclipse tomcat java.lang.OutOfMemoryError: PermGen space错误的解决方法

    错误代码: java.lang.OutOfMemoryError: PermGen space 原因分析: myeclipse或tomcat的内容分配的不够用,启动失败 解决方法: 1.找到tomca ...

  8. Java web轻量级开发面试教程的前言

    本文来是从 java web轻量级开发面试教程从摘录的. 为什么要从诸多的Java书籍里选择这本?为什么在当前网络信息量如此大的情况下还要买这本书,而不是自己通过查阅网络资料学习?我已经会开发Java ...

  9. 稀疏分解中的MP与OMP算法

    MP:matching pursuit匹配追踪 OMP:正交匹配追踪 主要介绍MP与OMP算法的思想与流程,解释为什么需要引入正交? !!今天发现一个重大问题,是在读了博主的正交匹配追踪(OMP)在稀 ...

  10. 初装Ubuntu一般配置

    1. 开启ssh远程 2.修改root密码 sudo passwd 输入两次密码. 3.授权普通用户root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ...