Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2254389
  • 博文数量: 310
  • 博客积分: 6853
  • 博客等级: 准将
  • 技术积分: 2833
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-04 16:41
文章分类

全部博文(310)

文章存档

2013年(17)

2012年(42)

2011年(76)

2010年(71)

2009年(99)

2007年(2)

2006年(1)

2005年(2)

分类: Oracle

2012-04-29 17:55:22

比如下面的执行计划

执行计划 
---------------------------------------------------------- 
Plan hash value: 4202050538 
----------------------------------------------------------------------------------------------------- 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
----------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT | | 107 | 15515 | 88 (2)| 00:00:02 | 
| 1 | SORT ORDER BY | | 107 | 15515 | 88 (2)| 00:00:02 | 
| 2 | TABLE ACCESS BY INDEX ROWID| ICME_NOPROJECT_SCORE | 107 | 15515 | 87 (0)| 00:00:02 | 
|* 3 | INDEX RANGE SCAN | UK_NOPROJECT_SCORE | 107 | | 7 (0)| 00:00:01 | 
-----------------------------------------------------------------------------------------------------

那总的代价是88,还是88+88+87+7呢?毫无疑问看第一行就可以,是88

Cost=(Single block I/O cost+ Multiblock I/O cost+ CPU cost)/sreadtim
#SRds*sreadtim #MRds*mreadtim #CPUCycles/cpuspeed

#SRds: Number of single block reads
#MRds: Number of multiblock reads
#CPUCycles: Number of CPU Cycles
Sreadtim: Single block read time
Mreadtim: Multiblock read time
Cpuspeed: Millions instructions per second

cost是从里层向外层累计折叠的,最上层那个表示总代价。oracle会在自动生成的计划里,选择一个最小代价的来执行你的sql

cost 只是在CBO优化器再执行时选择不同执行计划成本的一个判断值,如果为RBO优化器在执行计划中都看不到这个值

cost 内部记算方法oracle也不会公开,oracle内部用来比较各个执行计划所耗费的代价的值,从而使优化器可以选择最好的执行计划。

特性:

1、不同语句的cost值不具有可比性,只能对同一个语句的不同执行计划的cost值进行比较。

阅读(3408) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~