选择率和基数

一、选择率(Selectivity):选择率是指满足条件的行在查询的结果集中所占的比率

1、假设教室中有120个人,如何才能确定其中有多少人的生日是在10月份?
    一年中有12个月                  --已知条件
    出生日期可能散布在这12个月中           --假设
    出生在任何一个月份中的人占整个教室总人数的1/12   --月的选择率
    请求一个特定的月份                                      --谓词
    所请求的月份确实存在               --边界检查
    教室中总人数为120                 --基本基数

    得到答案为120*1/12=10                                    --计算基数


2、与选择率相关的视图

  user_tab_col_statistics.NUM_DISTINCT --12
        user_tab_col_statistics.DENSITY      --1/12
        user_tab_col_statistics.LOW_VALUE    --1
        user_tab_col_statistics.HIGH_VALUE  --12
        user_tab_col_statistics.NUM_NULLS    

        user_tab_statistics.NUM_ROWS


3、选择率的计算
        --月份 = 10 不考虑空值:1/12
        基本选择率=density=1/num_distinct
        --月份 = 10 考虑空值:1/12*1
        选择率=基本选择率*(num_rows-num_nulls)/num_rows
       -- 月份 > 8  (12-8)/(12-1) 
      选择率=(high_value-limit)/(high_value-low_value) 
       --月份 >= 8  (12-8)/(12-1)+1/12
        选择率=(high_value-limit)/(high_value-low_value)+1/num_distinct
       --月份 < 8  (8-1)/(12-1)
    选择率=(limit-low_value)/(high_value-low_value)
       --月份 <= 8  (8-1)/(12-1)+1/12
       选择率=(limit-low_value)/(high_value-low_value)+1/num_distinct
       --月份 >= 6 and 月份 <= 9  (9-6)/(12-1)+1/12+1/12 
        选择率=(high_limit-low_limit)/(high_value-low_value)+1/num_distinct+1/num_distinct
       --月份 >= 6 and 月份 < 9  (9-6)/(12-1)+1/12
        选择率=(high_limit-low_limit)/(high_value-low_value)+1/num_distinct
       --月份 > 6 and 月份 <= 9  (9-6)/(12-1)+1/12
        选择率=(high_limit-low_limit)/(high_value-low_value)+1/num_distinct
        
二、基数(Cardinality)

    基数=选择率*总行数(num_rows)


你可能感兴趣的:(出生日期,基数,选择率)