delete histogram
11g以下版本只能通过指定”columns size 1″重新分析表来删除histogram,挺麻烦的。
SQL> select column_name,HISTOGRAM from dba_tab_columns where table_name=’TEST’;
COLUMN_NAME HISTOGRAM
———————————————
TEST_ID NONE
VERSION_ID FREQUENCY
BUCKET NONE
FIELD_ID NONE
PARTITION_KEY FREQUENCY
SUBPARTITION_KEY FREQUENCY
DESIGN_VALUE FREQUENCYSQL> exec dbms_stats.gather_table_stats(user,’test’,cascade=>true,method_opt=>’for all columns size 1′);
SQL> select column_name,HISTOGRAM from dba_tab_columns where table_name=’TEST’;
COLUMN_NAME HISTOGRAM
———————————————
TEST_ID NONE
VERSION_ID NONE
BUCKET NONE
FIELD_ID NONE
PARTITION_KEY NONE
SUBPARTITION_KEY NONE
DESIGN_VALUE NONE
SUBPARTITION_KEY NONE
11g中则可以使用提供的col_stat_type参数来删除某个列的统计信息。方便多了。
col_stat_type
Type of column statistics to be deleted.This argument takes the following values:
*HISTOGRAM - delete column histogram only
*ALL - delete base column statistics and histogram (default value)
10g用dbms_stats.SET_COLUMN_STATS也可以删除histogram。9i没试过,应该也可以的。
9i、10g中用dbms_stats.set_column_stats应该也可以的:
SQL> select column_name,HISTOGRAM from dba_tab_columns where table_name=’TEST_H’;
COLUMN_NAME HISTOGRAM
————— —————
ID FREQUENCY
SQL> select owner,table_name,NUM_DISTINCT from dba_tab_columns where table_name=’TEST_H’;
OWNER TABLE_NAME NUM_DISTINCT
———- —————————— ————
SYS TEST_H 12
SQL> select column_name,HISTOGRAM from dba_tab_columns where table_name=’TEST_H’;
COLUMN_NAME HISTOGRAM
————— —————
ID NONE
SQL> exec dbms_stats.set_column_stats(’SYS’,'test_h’,'ID’,DISTCNT=>12);
PL/SQL procedure successfully completed.
Oh. Nice. thank you.