使用繫結變數窺探後的cardinality和selectivity的計算方法

xypincle發表於2017-04-12

  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值的數量.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28878983/viewspace-2137147/,如需轉載,請註明出處,否則將追究法律責任。

相關文章