zoukankan      html  css  js  c++  java
  • 运行计划中cost计算方法

    概念:

    blevel:二元高度=索引高度-1

    clustering_factor:集群因子,通过索引扫面得出的要查询table的blocks数量,clustering_factor接近table的blocks说明table是依照索引顺序存储的,clustering_factor接近table行数说明table相比于依照索引顺序。用一种更为乱序的存储的。

    索引扫描的计算公式:

    cost =

    blevel +

    ceil(leaf_blocks *effective index selectivity) +

    ceil(clustering_factor * effective table selectivity)


    一下測试是在rule based optimizer used条件下

    SQL> select leaf_blocks,blevel,clustering_factor from dba_indexes where index_name='IDX_T';
    
    LEAF_BLOCKS     BLEVEL CLUSTERING_FACTOR
    ----------- ---------- -----------------
            112          1               776



    SELECT b.num_rows, a.num_distinct, a.num_nulls, utl_raw.cast_to_number(high_value) AS high_value, utl_raw.cast_to_number(low_value) AS low_value
    , b.num_rows - a.num_nulls AS "NUM_ROWS-NUM_NULLS", utl_raw.cast_to_number(high_value) - utl_raw.cast_to_number(low_value) AS "HIGH_VALUE-LOW_VALUE"
    FROM dba_tab_col_statistics a, dba_tables b
    WHERE a.owner = b.owner
    AND a.table_name = b.table_name
    AND a.owner = 'SCOTT'
    AND a.table_name = upper('TEST')
    AND a.column_name = 'OBJECT_ID'


    NUM_ROWS   NUM_DISTINCT NUM_NULLSHIGH_VALUELOW_VALUENUM_ROWS-NUM_NULLSHIGH_VALUE-LOW_VALUE

    50736 5073515382025073553818

    effective index selectivity=(limit-low_value)/(high_value-low_value)

    SQL> select (1000-2)/(53820-2) selectivity from dual;
    
    SELECTIVITY
    -----------
    0.018543982

    SQL> SELECT OWNER FROM TEST WHERE OBJECT_ID<1000;
    
    已选择953行。
    
    
    运行计划
    ----------------------------------------------------------
    Plan hash value: 1810195980
    
    ---------------------------------------------------------------------
    | Id  | Operation                   | Name  | Rows  | Bytes | Cost  |
    ---------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |       |   941 | 10351 |    19 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| TEST  |   941 | 10351 |    19 |
    |*  2 |   INDEX RANGE SCAN          | IDX_T |   941 |       |     4 |
    ---------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - access("OBJECT_ID"<1000)

    1.回表io=ceil(clustering_factor * effective table selectivity)=19-4=15
    2.blevel +ceil(leaf_blocks *effective index selectivity)



  • 相关阅读:
    堆(heap)和栈(stack)的区别
    STL容器学习总结
    从瀑布模型、极限编程到敏捷开发
    智力题
    Trie树详解及其应用
    理解inode
    找出字符串中连续出现次数最多的子串
    Oracle数据库中大数据量查询优化问题分区表的操作方法
    “在解决方案中的一个或多个项目由于以下原因未能加载 项目文件或网站已移动或重新命名,或者不在您的计算机上” 的解决办法
    转:完全卸载Oracle方法
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6834964.html
Copyright © 2011-2022 走看看