Oracle11g,沒有統計資訊時,表的Card從哪來?

sundog315發表於2011-10-25

來源於這個問題:http://www.itpub.net/thread-1503855-1-1.html

表沒有統計資訊時,Cardinality從哪裡來?

做個試驗:

SQL> alter system flush shared_pool;

系統已更改。

SQL> create table t as select * from dba_objects where rownum<10001;

表已建立。

SQL> insert into t select * from dba_objects where rownum<10001;

已建立 10000 行。

SQL> /

已建立 10000 行。

SQL> commit;

提交完成。

SQL> select count(*) from t;

COUNT(*)
----------
30000

SQL> select t.num_rows,t.blocks from user_tables t where t.table_name='T'
2 ;

NUM_ROWS BLOCKS
---------- ----------

SQL> alter session set events '10053 trace name context forever';

會話已更改。

SQL> select * from t;

SQL> alter session set events '10053 trace name context off';

會話已更改。

10053事件裡,如何計算Cardinality就比較清楚了

*** 2011-10-25 16:19:37.525
** Executed dynamic sampling query:
level : 2
sample pct. : 16.237113 actual sample size : 6008
filtered sample card. : 6008
orig. card. : 10537
block cnt. table stat. : 388
block cnt. for sampling: 388
max. sample block cnt. : 64
sample block cnt. : 63
min. sel. est. : -1.00000000
** Using dynamic sampling card. : 37002
** Dynamic sampling updated table card.
Table: T Alias: T
Card: Original: 37001.650794 Rounded: 37002 Computed: 37001.65 Non Adjusted: 37001.65

6008/0.16237113=37001.65

[@more@]

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

相關文章