oracle的执行计划(二)

术语解释

 

行源       通过一个select语句从某个基对象(例如表或视图)或者组合的2个行源

断言    语句中where子句中的限定条件

驱动表    结果集首先产生的行源的表。如果从这个表返回的结果集太大,将会对之后的操作带来性能的巨大下降。

检查表    从驱动表返回数据以后,通过连接条件在这个表中继续查找满足的行。

 

Oracle如何访问数据?

 

物理级上,oracle通过block来读取数据。最少每次读取一个block,最多读取的block数量受到操作系统得限制。

 

逻辑级上,oracle通过下列方式读取数据:

·Full Table Scan (FTS) 即全表扫描

·Index Lookupunique & non-unique)即索引扫描

·Rowid rowid扫描

 

执行计划的层级

 

简单的执行计划看起来像下面这个样子:

Query Plan
-----------------------------------------
SELECT STATEMENT     [CHOOSE] Cost=1234
  TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]

 

最右上边的操作是执行计划最先执行的操作。在这个例子中TABLE ACCESS FULL LARGE是第一个操作。这句话的意思是将对LARGE表进行全表扫描。这个操作完成以后的行源将传递给下一个级别的查询过程。在这个例子中 SELECT STATEMENT 是最上层的操作。

 

[CHOOSE] 是语句总体的优化提示。表示oracle自己选择了一种优化方式。确定执行优化到底是基于什么方式需要看cost= 部分。例如下面的的例子可以看出CBO(基于成本的方式)优化将被使用,因为cost有值。

SELECT STATEMENT     [CHOOSE] Cost=1234

 

 

下面这个例子则使用了RBO(基于规则的方式)优化,因为cost部分是空的:

SELECT STATEMENT     [CHOOSE] Cost=

 

Cost只是一个oracle内部的一个相对值用来决定单个计划的最小成本。不同语句的cost值不具有可比性。

 

[:Q65001]表示这个特殊的部分执行了并行操作。其中的数字表示操作会与串行相反的并行方式来进行。

[ANALYZED]表示目前语句中的对象的分析数据有效。不是表示在这个级别中进行了分析。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值