删除对象统计信息
可以从数据字典中删除对象统计信息。除非是测试需要,否则通常没有必要这样做。虽然如此,但也可能出现你想利用动态采样而不希望某张表上有对象统计信息的情况。如果那样的话,就可以使用dbms_stats包中的下列过程:delete_database_stats、delete_dictionary_stats、delete_fixed_objects_stats、delete_schema_stats、delete_table_stats、delete_column_stats以及delete_index_stats。
对于每个gather_*_stats过程,都有一个对应的delete_*_stats过程。前者收集对象统计信息,后者删除对象统计信息。唯一的例外是delete_column_stats过程。顾名思义,它用来删除列统计信息和直方图。
表8-8总结了这些过程中的每一个可以使用的参数。大部分参数是相同的,因而它们与gather_*_stats过程中使用的参数具有相同的含义。这里只描述一些在之前的过程中尚未涉及的参数。
Ø cascade_parts 指定是否删除所有底层分区的统计信息。这个参数接受的值为TRUE和FALSE。默认值为TRUE。
Ø cascade_columns 指定是否同时删除列统计信息。这个参数接受的值为TRUE和FALSE。默认值为TRUE。
Ø cascade_indexes 指定是否同时删除索引统计信息。这个参数接受的值为TRUE和FALSE。默认值为TRUE。
Ø col_stat_type 指定删除哪些统计信息。如果将它设置为ALL,则删除列统计信息和直方图。如果将它设置为HISTOGRAM,则只删除直方图。默认值是NULL。这个参数从11.1版本开始可用。
Ø stat_category 指定删除哪种类别的统计信息。它接受以逗号分隔的列表形式的值。如果指定了OBJECT_STATS,则对象统计信息(表统计信息、列统计信息、直方图以及索引统计信息)会被删除。如果指定了SYNOPSES,则只有支持增量统计信息的信息会被删除。默认情况下,对象统计信息和概要信息都会被删除。这个参数从12.1版本开始可用。
表8-8 用于删除对象统计信息的过程的参数
参 数 |
数据库 |
数据字典 |
固定对象 |
模 式 |
表 |
列 |
索 引 |
目标对象 |
|
|
|
|
|
|
|
ownname |
|
|
|
y |
y |
y |
y |
indname |
|
|
|
|
|
|
y |
tabname |
|
|
|
|
y |
y |
|
colname |
|
|
|
|
|
y |
|
partname |
|
|
|
|
y |
y |
y |
cascade_parts |
|
|
|
|
y |
y |
y |
cascade_colums |
|
|
|
|
y |
|
|
cascade_indexes |
|
|
|
|
y |
|
|
stat_category |
y |
y |
|
y |
y |
|
|
col_stat_type |
|
|
|
|
|
y |
|
force |
y |
y |
y |
y |
y |
y |
y |
obj_filter_list |
y |
y |
y |
|
|
|
|
删除选项 |
|
|
|
|
|
|
|
no_invalidate |
y |
y |
y |
y |
y |
y |
y |
备份表 |
|
|
|
|
|
|
|
stattab |
y |
y |
y |
y |
y |
y |
y |
statid |
y |
y |
y |
y |
y |
y |
y |
statown |
y |
y |
y |
y |
y |
y |
y |
下面的调用展示了如何在不修改其他统计信息的情况下删除一个列的直方图(完整示例参见delete_histogram.sql):
BEGIN
dbms_stats.delete_column_stats(ownname => user,
tabname => 'T',
colname => 'VAL',
col_stat_type
=> 'HISTOGRAM');
END;
/