ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 越来越不懂cost咋算了

越来越不懂cost咋算了

原创 Linux操作系统 作者:wei-xh 时间:2011-06-23 11:30:46 0 删除 编辑
explain plan for      
    select /*+ no_cpu_costing */* from vodka.bpm_actinst where col2=:1 and actor=:2;
-------------------------------------------------------------------------------------------
| Id  | Operation                        | Name                   | Rows  | Bytes | Cost  |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                        |     2 |   594 |   221 |
|   1 |  TABLE ACCESS BY INDEX ROWID     | BPM_ACTINST            |     2 |   594 |   221 |
|   2 |   BITMAP CONVERSION TO ROWIDS    |                        |       |       |       |
|   3 |    BITMAP AND                    |                        |       |       |       |
|   4 |     BITMAP CONVERSION FROM ROWIDS|                        |       |       |       |
|*  5 |      INDEX RANGE SCAN            | BPM_ACT_INST_ACTOR_IND |  1338 |       |     9 |
|   6 |     BITMAP CONVERSION FROM ROWIDS|                        |       |       |       |
|*  7 |      INDEX RANGE SCAN            | BPM_ACTINST_COL2_IND   |  1338 |       |   191 |
-------------------------------------------------------------------------------------------

explain plan for
    select * from vodka.bpm_actinst where col2=:1 and actor=:2;

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                        |     2 |   594 |   202   (1)| 00:00:03 |
|   1 |  TABLE ACCESS BY INDEX ROWID     | BPM_ACTINST            |     2 |   594 |   202   (1)| 00:00:03 |
|   2 |   BITMAP CONVERSION TO ROWIDS    |                        |       |       |            |          |
|   3 |    BITMAP AND                    |                        |       |       |            |          |
|   4 |     BITMAP CONVERSION FROM ROWIDS|                        |       |       |            |          |
|*  5 |      INDEX RANGE SCAN            | BPM_ACT_INST_ACTOR_IND |  1338 |       |     9   (0)| 00:00:01 |
|   6 |     BITMAP CONVERSION FROM ROWIDS|                        |       |       |            |          |
|*  7 |      INDEX RANGE SCAN            | BPM_ACTINST_COL2_IND   |  1338 |       |   192   (1)| 00:00:03 |
-----------------------------------------------------------------------------------------------------------


计算cpu的cost比不计算cpu的cost要小。真是伤不起。

----------------索引部分的cost
select (112060/599)+3 from dual;-----------(leaf_block/distint)+LEVEL
(112060/599)+3
--------------
    190.078464

select (47540/7499)+2 from dual;-----------(leaf_block/distint)+LEVEL
(47540/7499)+2
--------------
    8.33951193

select (191+9)*1.1 from dual;------------1.1是位图索引固定的比例
   200*1.1
----------
       220


--------------回表的cost

select 15608540-5572000 from dual;-----------总行数-空值
15608540-5572000
----------------
        10036540


-----------------------总选择率
1/(7499*599)

----------------回表读取的块数
10036540/(7499*599)=2.2-------------这里我们毛估一下,没有用80/20原理

-----------------总cost
220+2.2=222.2

再算上cpu的cost 应该比这个还大点才对。不知道计算cpu的时候,哪里出了问题,ORACLE真是越来越搞不懂了。



TABLE_NAME                  NUM_ROWS     BLOCKS AVG_ROW_LEN TO_CHAR(LAST_ANALYZED,'MM/DD/YYYYHH24:
------------------------- ---------- ---------- ----------- --------------------------------------
BPM_ACTINST                 15608540     658314         297 06/19/2011 03:48:58


name                                                           NUM_ROWS   distinct LEAF_BLOCKS         cf      level   alfbpkey
------------------------------------------------------------ ---------- ---------- ----------- ---------- ---------- ----------
BPM_ACTINST_COL2_IND                                           15868480        599      112060    6062780          3        187
BPM_ACT_INST_ACTOR_IND                                          9937520       7499       47540    8278480          2          6

22 rows selected.

COLUMN_NAME          NUM_DISTINCT  NUM_NULLS NUM_BUCKETS    DENSITY
-------------------- ------------ ---------- ----------- ----------
ACTOR                        7499    5572000           1 .000133351
COL2                          599          0           1 .001669449

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22034023/viewspace-700568/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2318564