转载:CBO基于成本的优化器
----------------------------------2013/10/02
CBO基于成本的优化器:让oracle获取所有执行计划的相关信息,通过对这些信息做计算分析,最后得出一个代价最小的执行计划作为最终执行计划。
 
还是前面的例子,让我们再来看看CBO的表现:
 
SQL> select /*+ all_rows */ * from t where id = 1;

已选择50600行。

执行计划
----------------------------------------------------------
Plan hash value: 1601196873 --------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 47385 | 3655K| 56 (4)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 47385 | 3655K| 56 (4)| 00:00:01 |
-------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("ID"=1) Note
-----
- dynamic sampling used for this statement 统计信息
----------------------------------------------------------
9 recursive calls
0 db block gets
3649 consistent gets
0 physical reads
0 redo size
1510200 bytes sent via SQL*Net to client
37503 bytes received via SQL*Net from client
3375 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
50600 rows processed SQL> select /*+ all_rows */ * from t where id = 99; 执行计划
----------------------------------------------------------
Plan hash value: 4013845416 -------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 79 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 79 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND_T | 1 | | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 2 - access("ID"=99) Note
-----
- dynamic sampling used for this statement 统计信息
----------------------------------------------------------
7 recursive calls
0 db block gets
67 consistent gets
0 physical reads
0 redo size
473 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
CBO作出了正确的执行计划:id=1,全表扫描;id=99,索引扫描。
 
 
CBO优化器有两种可选的运行模式:
FIRST_ROWS(n):将结果集中的前n条记录以最快的速度反馈回来,而其他的结果并不需要同时返回。(适用于分页等)
ALL_ROWS:用最快的速度将sql执行完毕,将结果集全部返回。
 
OLAP(在线分析系统):就是数据仓库,用户数很小,数据量非常大,长事务的操作。
OLTP(在线事务处理系统):用户并发数都很多,但他们只对数据库做很小的操作,数据库侧重于对用户操作的快速响应。
 
可以看见一个OLTP数据库的默认优化器就是ALL_ROWS
 
SQL> conn /as sysdba
已连接。
SQL> show parameter optimizer_mode NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS
dbms_stats包:
 
exec dbms_stats.gather_table_stats(ownname=>'u1',tabname=>'t',cascade=>true);
exec dbms_stats.gather_index_stats(ownname=>'u1',indname=>'ind_t');
exec dbms_stats.gather_schema_stats(ownname=>'u1',options=>'gather auto');
options参数选项:
gather ——重新分析整个架构(Schema)。
gather empty ——只分析目前还没有统计的表。
gather stale ——只重新分析修改量超过10%的表(这些修改包括插入、更新和删除)。
gather auto ——重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。
注意,使用gather auto类似于组合使用gather stale和gather empty。

CBO 基于成本的优化器[基础]的更多相关文章

  1. Apache Spark 2.2中基于成本的优化器(CBO)(转载)

    Apache Spark 2.2最近引入了高级的基于成本的优化器框架用于收集并均衡不同的列数据的统计工作 (例如., 基(cardinality).唯一值的数量.空值.最大最小值.平均/最大长度,等等 ...

  2. Oracle优化器基础知识之访问数据的方法

    目录 一.访问数据的方法 1.直接访问数据 2.访问索引 一.访问数据的方法 Oracle访问表中数据的方法有两种,一种是直接表中访问数据,另外一种是先访问索引,如果索引数据不符合目标SQL,就回表, ...

  3. Spark SQL 性能优化再进一步:CBO 基于代价的优化

    摘要: 本文将介绍 CBO,它充分考虑了数据本身的特点(如大小.分布)以及操作算子的特点(中间结果集的分布及大小)及代价,从而更好的选择执行代价最小的物理执行计划,即 SparkPlan. Spark ...

  4. Oracle的优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  5. PLSQL_性能优化系列04_Oracle Optimizer优化器

    2014-09-25 Created By BaoXinjian

  6. Oracle优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

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

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

  8. Oracle 优化器

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

  9. Oracle 课程五之优化器和执行计划

    课程目标 完成本课程的学习后,您应该能够: •优化器的作用 •优化器的类型 •优化器的优化步骤 •扫描的基本类型 •表连接的执行计划 •其他运算方式的执行计划 •如何看执行计划顺序 •如何获取执行计划 ...

随机推荐

  1. VB6之扫雷克星

    很久之前,那时候我还不太会玩(现在也不厉害)扫雷这个游戏,同学总在我面前炫耀自己的技术有多叼.“高级,99颗雷,只需三分钟...”,如此这般.也许确实需要天赋,我总要排查个半天才敢点下左键,然后就BO ...

  2. [UWP]浅谈按钮设计

    一时兴起想谈谈UWP按钮的设计. 按钮是UI中最重要的元素之一,可能也是用得最多的交互元素.好的按钮设计可以有效提高用户体验,构造让人眼前一亮的UI.而且按钮通常不会影响布局,小小的按钮无论怎么改也不 ...

  3. Codeforces Round #371 (Div. 2) 转换数字

    C. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. powershell 统计AD中所有计算机及对应的操作系统信息

    要想用powershell管理域,首先先加载activedirectory模块 PS C:\> import-module activedirectory 下面就可以利用get-adcomput ...

  5. 三、使用vscode在docker中debug

    上篇博文中分享了如何用docker-compose搭建AspNetCore的开发环境,在开发过程中debug是必不可少的,如果你使用VS2017的话,右键就可以了,而作为跨平台的.net core开发 ...

  6. HashMap源码浅析(jdk1.8)

    HashMap是以key-value键值对的形式进行存储数据的,数据结构是以数组+链表或红黑树实现. 数据结构图如下: 一.关键属性 HashMap初始化和方法使用的属性. /** * 默认初始容量1 ...

  7. 基于layUI实现前端分页功能

    一.layUI介绍 Layui 是一款采用自身模块规范编写的国产前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用.内置了一些常用元素和组件的UI框架. 下载地址为htt ...

  8. (转)IBM MQ 创建以及常见问题集锦

    背景:这篇文章还是很全面的,但是很杂乱 后面慢慢整理吧! 1 MQ 消息队列+发送队列+消息通道 接收通道名称与发送端的发送通道名称要一致,修改通道信息后要执行 start channle(chlna ...

  9. LeetCode-Minimum Path Sum[dp]

    Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...

  10. python开发部署时新增数据库中表的方法

    在项目版本让运维部署时,涉及到数据库表的增加问题,想了一下,可以有四种方法 1.使用SQLAlchemy的db.create_all()方法 # -*- coding:utf-8 -*- from f ...