ITPub博客

使用绑定变量窥探后的cardinality和selectivity的计算方法

转载 作者:xypincle 时间:2017-04-12 22:12:05 0 删除 编辑

  1. create table t1 as select * from dba_objects;

  2. create index idx_t1 on t1(object_id);

  3. exec dbms_stats.gather_table_stats('SYS','T1',estimate_percent=>100,no_invalidate=>false,cascade=>true,method_opt=>'for all columns size 1');

  4. select count(*) from t1 where object_id between :x and :y;

  5. select * from table(dbms_xplan.display_cursor(null,null,'advanced');

  6. --使用绑定变量窥探后的cardinality和selectivity的计算方法:
  7. cardinality = num_rows * selectivity

  8. selectivity = ((y-x)/(high_value - low_value) + 2/num_distinct) * null_adjust

  9. null_adjust = (num_rows - num_nulls)/num_rows

 1.上述计算公司适用于启用了绑定变量窥探且where条件为“目标列between x and y”的selectivity和cardinality的计算,且x和y均处于目标列的low_value和high_value之间;
 2.num_rows表示目标列所在表的记录数;
 3.low_value和high_value分别表示目标列的最小值和最大值;
 4.num_distinct表示目标列的distinct值的数量;
 5.num_nulls表示目标列的null值的数量.

下一篇: 查看绑定变量
请登录后发表评论 登录
全部评论

注册时间:2013-05-11

  • 博文量
    208
  • 访问量
    87598