使用dbms_stat採集統計資訊時estimate_percent和cascade的預設值

來源:互聯網
上載者:User

收集統計資訊可以用dbms_stats包,通常用這樣的文法:exec dbms_stat.gather_table_stats(ownname=>'xxx', tabname=>'xxx', estimate_percent=>xxx, method_opt=>'xxx', cascade=>xxx);


其中estimate_percent表示選擇的採樣比例,如果太低,收集速度會快,但可能不會很準確,如果太高,收集速度會慢,但比較準確,各有利弊。但同時也支援預設:exec dbms_stat.gather_table_stats(ownname=>'xxx', tabname=>'xxx');,那這裡收集的採樣比例是多少呢?


做個實驗:

SQL> create table t2 as select * from dba_objects;
Table created.

SQL> select count(*) from t2;
  COUNT(*)
----------
     11218


SQL> create index idx_t2 on t2(object_id);
Index created.


SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS', tabname=>'T2');
PL/SQL procedure successfully completed.


查詢dba_tables表,看到NUM_ROWS值是11218,說明此處採樣比例是100%。

再查詢dba_indexes表,看到索引IDX_T2的相關統計列已經有值了,說明索引也進行了分析,即CASCADE預設值是TRUE。

重新查詢dba_ind_columns表,看到列已經有了值,例如:COLUMN_POSITION、COLUMN_LENGTH等,也證明了CASCADE預設值是TRUE。


總結:

使用dbms_stats.gather_table_stats(ownname=>'SYS', tabname=>'T2');方式採集統計資訊,

1、estimate_percent值預設是100%(其實estimate_percent可以設定為NULL,和100%作用相同,我理解NULL和不設這個值也相同,根據三段論傳遞,那麼不設estimate_percent即預設是100%)。

2、CASCADE預設值是TRUE,即會對錶、索引和列都會進行分析採集統計資訊。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.