CBO之B*Tree Index Range Scan - IRS算法_index range scan的底层算法-程序员宅基地

技术标签: Oracle Internal  

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/44262353

************************************************************

 二、CBO之B*Tree Index Range Scan - IRS算法
*************************************************************


1、在表gyj_t1建索引

SQL> create index idx_gyj_t1_id on gyj_t1(id);

Index created.

2、收集统计信息
SQL> BEGIN
  2  DBMS_STATS.GATHER_TABLE_STATS(
  3  ownname => 'GYJ',
  4  tabname => 'GYJ_T1',
  5  estimate_percent => 100,
  6  method_opt => 'for all columns size 1',
  7  degree => DBMS_STATS.AUTO_DEGREE,
  8  cascade=>TRUE
  9  );
 10  END;
 11  /

PL/SQL procedure successfully completed.

3、执行SQL,生成执行计划,索引范围扫描成本为5
 
  SQL> select name from gyj_t1 where id<500;

499 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3428071533

---------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |   499 | 10479 |     5   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| GYJ_T1        |   499 | 10479 |     5   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_GYJ_T1_ID |   499 |       |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID"<500)


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         73  consistent gets
          0  physical reads
          0  redo size
      17972  bytes sent via SQL*Net to client
        886  bytes received via SQL*Net from client
         35  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        499  rows processed

4、公式

IRS Cost = I/O Cost + CPU Cost
I/O Cost = Index Access I/O Cost + Table Access I/O Cost
Index Access I/O Cost = LVLS + CEIL(#LB * ix_sel)
Table Access I/O Cost = CEIL(CLUF * ix_sel_with_filters)
CPU Cost = ROUND(#CPUCycles / cpuspeed / 1000 / sreadtim)

5、LVLS (索引高度)
SQL> select blevel from dba_indexes where index_name='IDX_GYJ_T1_ID';  

    BLEVEL
----------
     1        

6、#LB (索块叶块)
SQL> select leaf_blocks,blevel,clustering_factor from dba_indexes where index_name='IDX_GYJ_T1_ID';  

LEAF_BLOCKS     
-----------
        222

7、ix_sel (索引的选择率)
1.g) Unbounded open (“col < val”)
Sel = ((val - low_value) / (high_value - low_value)) * A4Nulls
 
SQL> SET LINESIZE 1000
SQL> select
  2  t.num_rows,  
  3  c.num_distinct,  
  4  c.num_nulls,  
  5  utl_raw.cast_to_number(high_value) high_value,  
  6  utl_raw.cast_to_number(low_value) low_value,  
  7  (t.num_rows-c.num_nulls) "NUM_ROWS-NUM_NULLS",  
  8  utl_raw.cast_to_number(high_value)- utl_raw.cast_to_number(low_value)"HIGH_VALUE-LOW_VALUE"
  9  from dba_tab_col_statistics c, dba_tables t  
 10  where c.owner = t.owner  
 11  and c.table_name = t.table_name  
 12  and c.owner ='GYJ'  
 13  and c.table_name = 'GYJ_T1'  
 14  and c.column_name='ID';

  NUM_ROWS NUM_DISTINCT  NUM_NULLS HIGH_VALUE  LOW_VALUE NUM_ROWS-NUM_NULLS HIGH_VALUE-LOW_VALUE
---------- ------------ ---------- ---------- ---------- ------------------ --------------------
    100000       100000          0     100000          1             100000                99999

 SQL> select((500 - 1) / (100000 - 1)) * ((100000 - 0) / 100000) from dual;

SQL> SELECT ((500 - 1) / (100000 - 1)) * ((100000 - 0) / 100000) FROM DUAL;

((500-1)/(100000-1))*((100000-0)/100000)
----------------------------------------
                               .00499005

Index Access I/O Cost = LVLS + CEIL(#LB * ix_sel)
SQL> select 1+CEIL(222*0.00499005) from dual;

1+CEIL(222*0.00499005)
----------------------
                     3

9、CLUF(聚簇因子)
SQL> select clustering_factor from dba_indexes where index_name='IDX_GYJ_T1_ID';  
 CLUSTERING_FACTOR
 -----------------
     356
Table Access I/O Cost = CEIL(CLUF * ix_sel_with_filters)
                      
SQL> select CEIL(356 * 0.00499005) from dual;

CEIL(356*0.00499005)
--------------------
                   2

10、IO的成本
I/O Cost = Index Access I/O Cost + Table Access I/O Cost=3+2=5

11、CPU的成本
CPU Cost = ROUND(#CPUCycles / cpuspeed / 1000 / sreadtim)

(1)#CPUCycles
 SQL> select cpu_cost,OPERATION from plan_table;

  CPU_COST OPERATION
---------- ------------------------------
    220607 SELECT STATEMENT
    220607 TABLE ACCESS
    121364 INDEX

 (2) cpuspeed
SQL> select pname, pval1 from sys.aux_stats$ where sname='SYSSTATS_MAIN';

PNAME                               PVAL1
------------------------------ ----------
CPUSPEEDNW                     2894.14695
IOSEEKTIM                              10
IOTFRSPEED                           4096
SREADTIM
MREADTIM
CPUSPEED
MBRC
MAXTHR
SLAVETHR

(3)sreadtim
SQL> select (select pval1 from sys.aux_stats$ where pname = 'IOSEEKTIM') +
  2         (select value from v$parameter where name = 'db_block_size') /
  3         (select pval1 from sys.aux_stats$ where pname = 'IOTFRSPEED') "sreadtim"
  4    from dual;

  sreadtim
----------
        12

(4)CPU Cost = ROUND(#CPUCycles / cpuspeed / 1000 / sreadtim)
        select ROUND(121364 / 2894.14695 / 1000 / 12) from dual;
SQL>  select ROUND(121364 / 2894.14695 / 1000 / 12) from dual;

ROUND(121364/2894.14695/1000/12)
--------------------------------
                               0
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guoyJoe/article/details/44262353

智能推荐

A .project file already exists in directory while import projects from git (Eclipse Oxygen 4.7.0)-程序员宅基地

文章浏览阅读1.1k次。不太习惯用eclipse 中的git。因为当你用git把项目拉下来之后,此时在你的workspace中还是找不到项目代码(Project Explorer中),还得再做一步就是把项目import 到workspace,之前在使用VSCode的时候,用的小伙伴都知道,用git拉代码后,命令执行完所有的代码就可以看到了。但是如果VSCode还是做F/E比较好的,做B/E开发就可能没有eclipse ..._a .project file already exists in directory

XAML 实例演示之九 – Hello Kitty 专卖店产品演示-程序员宅基地

文章浏览阅读53次。XAML 实例演示之九 – Hello Kitty 专卖店产品演示本文演示如何结合XAML 实例演示系列文章(1-8)中学习的技术,制作一个Hello Kitty 专卖店产品演示窗口。范例程序演示效果如下:范例程序完整代码下载。因为范例程序引用了[url]http://www.giftcenter.cn/[/url]...

Auve-data数据大屏展示(avue-echart)_avue-data-程序员宅基地

文章浏览阅读1.7w次,点赞5次,收藏30次。- 图表 - 柱状图 - 折线图 - 饼图 - 象形图 - 雷达图 - 散点图 - 漏斗图 - 地图- 文字 - 文本框 - 跑马灯 - 超链接 - 实时时间- 媒体 - 图片 - 图片框 - 轮播图 - iframe - video- 指标 - 翻牌器 - 环形图 - 进度条 - 仪表盘 - 字符云- 表格 - 选项卡 - 表格- ..._avue-data

线性代数笔记(7) 向量、矩阵的范数_m1范数和无穷范数相容-程序员宅基地

文章浏览阅读1.8k次。向量、矩阵的范数在向量、矩阵(复数域)上定义一个关于内部各个元素的运算,只要运算满足以下规律就可以成为范数正定性:||A|| >= 0,且当且仅当为0向量(0矩阵)时取等号齐次性:||kA|| = |k| · ||A|| ,k为一个复数三角不等式:||A+B|| <= ||A|| + ||B||此外对于方阵还有一个相容性(乘法不等式)4. 相容性:||AB|| <= ||A||·||B||一些常用的向量、矩阵范数https://blog.csdn.net/zaishui_m1范数和无穷范数相容

Android源码在线查看网站_android 源码在线-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏34次。安卓社区https://www.androidos.net.cn/sourcecode (推荐)AndroidXRef http://androidxref.com/安卓特性(包括历史版本):https://developer.android.google.cn/_android 源码在线

白兵机器人怎样连接_玩物 | Star Wars Stormtrooper 遥控机器人 可爱造型星战白兵...-程序员宅基地

文章浏览阅读3k次。随着《星球大战》40周年,新电影《星球大战:最后绝地武士》于12月14日上映,星战迷除了可以欣赏电影外,一连串的外围商品亦令星战迷十分兴奋 ! 研发智能型机器人公司UBTECH与迪斯尼联乘推出白兵机器人 First Order Stormtrooper,一起来看看吧!11吋白兵 外形可爱精致First Order Stormtrooper白兵机器人高28cm,外形走可爱风格,头部比身体更大一点,走..._ubtech优必选智能ai遥控机器人星球大战starwars白兵stormtrooper

随便推点

VMware vSphere虚拟化基础管理平台-程序员宅基地

文章浏览阅读849次,点赞34次,收藏24次。VMware公司成立于1998年,2003年存储厂商EMC以6.35亿美元收购了VMware;2015年10月,戴尔宣布以670亿美元收购EMC。VMware公司在2018年全年收入79.2亿美元。

DB2表空间的基本操作之修改表空间大小_alter tablespace resize-程序员宅基地

文章浏览阅读3.4k次。DB2表空间的基本操作之修改表空间大小_alter tablespace resize

K8s上使用rook搭建Ceph集群_ceph orch set backend rook-程序员宅基地

文章浏览阅读1.4k次。知识补充:1、Ceph mgr和monmon会监控ceph集群中OSD空间使用情况Ceph的MON的主要作用是维持集群的主副本映射图。 Ceph的MON还提供了身份验证和日志记录服务。ceph luminous版本中新增加了一个组件: Ceph Manager Daemon,简称ceph-mgr。 该组件的主要作用是分担和扩展monitor的部分功能,减轻monitor的负担,让更好地管理ceph存储系统。ceph-mgr 目前的主要功能是把集群的一些指标暴露给外界使用。监控是什.._ceph orch set backend rook

ArcGIS模型构建器计算几何(面积)_arcgis几何计算器-程序员宅基地

文章浏览阅读990次。ArcGIS中计算面积的公式是基于当前地图的投影系统和坐标单位计算的。如果需要计算不同投影和单位下的面积,需要先进行投影和单位的转换。(这是python计算面积的公式);后弹出的模型的连接器,如下;双击或者右键弹出设置参数,工具,并将其拖到模型界面。根据同样的操作,找到。:上一步起名的字段;_arcgis几何计算器

windows打开和关闭默认共享方法汇总_windows默认共享的打开和关闭-程序员宅基地

文章浏览阅读1.6k次。关闭默认共享_windows默认共享的打开和关闭

前端文件下载的几种方式_前端实现下载文件-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏13次。前端开发中,经常遇到文件下载的功能。这里对常见的文件下载方式做一些总结。一、直接下载针对一些浏览器无法识别的文件格式。可以直接在地址栏上出入URL即可触发浏览器的下载功能。同类的还有window.location.href、window.open地址栏输入文件URLwindow.location.href = URLwindow.open(URL)二、直接下载(使用a标签download属性)直接下载仅使用的浏览器无法识别的文件。如果是浏览器支持的文件格式(如:html、jpg、png)_前端实现下载文件

推荐文章

热门文章

相关标签