2013-03-04 101 views
1

我们的数据库设置为收集模式统计的东西,如如何收集统计信息

method_opt => 'for all columns size auto' 

的问题,当指定了method_opt例外的是,这样的直方图也被分配了更好的应该不会有直方图生成列。有没有办法为这些列设置一个例外(同时保留其他列的自动大小)?理由:我们的一些(索引)列是VARCHAR2(100),而前50个字符几乎相同 - 在前50个字符中有不到10个不同的值。当收集列统计信息时,会生成直方图。但直方图生成只分析VARCHAR2列的前30个字符,这会导致完全错误的直方图。 (实际上,这些值几乎是均匀分布的。)

编辑:我的想法是使用'for all columns size auto,but for columns(ECID)size 1'。但我不知道这是否可行,method_opt语法对我来说不是很清楚。

+0

了method_opt =>被视为“为所有列的大小自动为列大小1 ECID”不正是我需要的,但它仅适用于GATHER_TABLE_STATS,而不是gather_schema_stats。 – xarx 2013-03-04 21:48:02

回答

1

将彻底解决该列的直方图是使用

exec dbms_stats.set_table_prefs('schema','table','METHOD_OPT',''for all columns size auto for columns size 1 ECID'); 

,然后收集统计信息通常使用gather_schema_stats。通过这种方式,我可以解决上面提到的针对gather_schema_stats的method_opt的限制。目前的喜好可以通过

select * from dba_tab_stat_prefs; 
0

,你可以尝试使用skewonly选项,将只在倾斜的数据生成柱状图:

method_opt => 'for all columns size skewonly' 
+0

我认为这不会有帮助,因为即使统计信息生成器只能根据列的前30个字符来决定,也应该决定该列是倾斜的并且需要直方图。 – xarx 2013-03-04 12:29:57