如何看待sql執行計劃裏的cost

比如下面的執行計劃

執行計劃 

---------------------------------------------------------- 
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值進行比較。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章