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

どうREPEATですか?http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_stats.htm#i1036456 REPEATと同様: ヒストグラムが既にある列のみでヒストグラムを収集します。

于 2013-03-04T12:51:38.093 に答える