http://www.xuexizu.com/group/32991/forum/3361/85131
1.建立測試表stats_test
[email protected]> conn sec/sec
Connected.
[email protected]> create table stats_test ( col1 number, col2 varchar2(40));
Table created.
[email protected]> insert into stats_test select rownum,object_name from all_objects;
11237 rows created.
[email protected]> commit;
Commit complete.
2.收集列的基本資訊,不收集柱狀圖,指定的size等于1(bucket“小桶”=1)
[email protected]>exec dbms_stats.gather_table_stats(user, 'STATS_TEST', cascade=>false, method_opt=>'for columns col1 size 1');
PL/SQL procedure successfully completed.
[email protected]>select column_name,num_distinct,num_buckets,low_value,high_value,density,avg_col_len,histogram from user_tab_columns where table_name='STATS_TEST';
COLUMN_NAM NUM_DISTINCT NUM_BUCKETS LOW_VALUE HIGH_VALUE DENSITY AVG_COL HISTOGRAM
---------- ------------ ----------- ---------- ---------- ---------- ------- ---------
COL1 11237 1 C102 C3020D26 .000088992 5 NONE
COL2 NONE
3.收集列的柱狀圖資訊,指定的size大于等于2小于等于254(bucket“小桶” between 2 and 254)
[email protected]>exec dbms_stats.gather_table_stats(user, 'STATS_TEST', cascade=>false, method_opt=>'for columns col1 size 2');
PL/SQL procedure successfully completed.
[email protected]>select column_name,num_distinct,num_buckets,low_value,high_value,density,avg_col_len,histogram from user_tab_columns where table_name='STATS_TEST';
COLUMN_NAM NUM_DISTINCT NUM_BUCKETS LOW_VALUE HIGH_VALUE DENSITY AVG_ HISTOGRAM
---------- ------------ ----------- ---------- ---------- ---------- ---- ---------------
COL1 11237 2 C102 C3020D26 .000088992 5 HEIGHT BALANCED
COL2 NONE
4.10g中删除列已有的柱狀圖資訊同時保留列的基本統計資訊方法:需要重新收集size為1的統計資訊
[email protected]>exec dbms_stats.gather_table_stats(user, 'STATS_TEST', cascade=>false, method_opt=>'for columns col1 size 1');
PL/SQL procedure successfully completed.
[email protected]> select column_name,num_distinct,num_buckets,low_value,high_value,density,avg_col_len,histogram from user_tab_columns where table_name='STATS_TEST';
COLUMN_NAM NUM_DISTINCT NUM_BUCKETS LOW_VALUE HIGH_VALUE DENSITY AVG_COL_LEN HISTOGRAM
---------- ------------ ----------- ---------- ---------- ---------- ----------- ---------
COL1 11237 1 C102 C3020D26 .000088992 5 NONE
COL2 NONE
5.11g中删除已有的柱狀圖資訊同時保留列的基本統計資訊得到了簡化
[email protected]>exec dbms_stats.delete_column_stats(user, 'STATS_TEST','COL1',col_stat_type=>'HISTOGRAM');
PL/SQL procedure successfully completed.
[email protected]> select column_name,num_distinct,num_buckets,low_value,high_value,density,avg_col_len,histogram from user_tab_columns where table_name='STATS_TEST';
COLUMN_NAM NUM_DISTINCT NUM_BUCKETS LOW_VALUE HIGH_VALUE DENSITY AVG HISTOGRAM
---------- ------------ ----------- ---------- -------------------- ---------- --- ---------
COL1 15404 1 C102 C3023705 .000064918 5 NONE
COL2 NONE
6.删除整個列的統計資訊,使用delete_column_stats
[email protected]>exec dbms_stats.delete_column_stats(user, 'STATS_TEST', 'COL1');
PL/SQL procedure successfully completed.
[email protected]> select column_name,num_distinct,num_buckets,low_value,high_value,density,avg_col_len,histogram from user_tab_columns where table_name='STATS_TEST';
COLUMN_NAM NUM_DISTINCT NUM_BUCKETS LOW_VALUE HIGH_VALUE DENSITY AVG_COL_LEN HISTOGRAM
---------- ------------ ----------- ---------- ---------- ---------- ----------- ---------
COL1 NONE
COL2 NONE
7.混合打法:同一個過程中收集多個列的統計資訊,不同的列指定不同的size數
[email protected]>exec dbms_stats.gather_table_stats(user, 'STATS_TEST', cascade=>false, method_opt => 'for columns col1 size 1 for columns col2 size 2');
PL/SQL procedure successfully completed.
[email protected]> select column_name,num_distinct,num_buckets,low_value,high_value,density,avg_col_len,histogram from user_tab_columns where table_name='STATS_TEST';
COLUMN_NAM NUM_DISTINCT NUM_BUCKETS LOW_VALUE HIGH_VALUE DENSITY AVG_C HISTOGRAM
---------- ------------ ----------- ---------- ---------- ---------- ----- ---------------
COL1 11237 1 C102 C3020D26 .000088992 5 NONE
COL2 8717 2 4143434553 5F75746C24 .000134719 19 HEIGHT BALANCED
5324 5F6C6E635F
696E645F70
61727473
8.小結
使用dbm_stats收集及删除列的統計資訊是一種高效的方法,也是Oracle推薦的統計列資訊的方法
對生産系統的核心表可以使用“混合打法”編寫合适的統計分析腳本,定期執行,提高資料庫的效率
secooler