1

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

method_opt => 'for all columns size auto'

问题是这样的直方图也被分配给不应该生成直方图的列。有没有办法为这些列设置例外(同时为其他列保留自动大小)?

基本原理:我们的一些(索引)列是 VARCHAR2(100),而前 50 个字符几乎相同 - 前 50 个字符中的不同值少于 10 个。当收集列统计信息时,会生成直方图。但是直方图生成只分析了 VARCHAR2 列的前 30 个字符,这导致了完全错误的直方图。(事实上​​,这些值几乎是均匀分布的。)

编辑:我的想法是使用类似“所有列大小自动,但列(ECID)大小为 1”之类的东西。但我不知道这是否可能,method_opt 语法对我来说不是很清楚。

4

3 回答 3

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;
于 2013-03-05T12:03:45.567 回答
0

您可以尝试使用 skewonly 选项,该选项只会在倾斜数据上生成直方图:

method_opt => 'for all columns size skewonly'
于 2013-03-04T11:38:02.260 回答
0

怎么样REPEAThttp://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_stats.htm#i1036456REPEAT 一样:仅在已有直方图的列上收集直方图

于 2013-03-04T12:51:38.093 回答