これはいくつかのことによって異なります。
まず、値の分布。 5つの別個の値しか持たないが、そのうちの1つがテーブルの行の99.9999%を占める場合、明らかにオプティマイザがその値のインデックスを使用することを望まないでしょうが、かもしれないは、このような場合には、関数ベースの索引を使用して、関心のある値のみを索引付けし、スペースを取っているものは索引化しないようにしてください。
第2に、テーブルにアクセスせずにそのインデックスを使用して回答できるクエリはありますか?
重要なのはアクセスされる行の割合だけでなく、アクセスする必要のあるテーブルのブロック数です。たとえば、平均1000ブロックと30行のテーブルがあり、1つの列に30個の異なる値(それぞれが1000行に存在する)がある場合、すべての行を読み込むために訪問する必要があるブロックの数1つの値は、行の分散方法に応じて、1000/30 = 34(索引を使用する価値があります)と1000(索引を使用する価値がない)の間で変化します。これはインデックスのクラスタ化係数で表されます。値がテーブル内の行数に近い場合、インデックスは使用される可能性が低く、ブロック数に近い場合は、中古。
また、インデックス圧縮を参照してスペースを節約できるかどうかを確認することもできます。
ビットマップインデックスに注意してください。同時に複数のセッションによって変更されるシステム(たとえば、2人が同時にインデックス付きテーブルに行を挿入するなど)には向いていません。
これらの5つの値に対する述部を持つ照会の効率を改善したい場合、より効果的な戦略は、部分的には照会のパーティション・プルーニングのためですが、オプティマイザーが使用できる統計の改善1つのパーティションだけがアクセスされ、グローバル統計の代わりにパーティションレベル統計を使用できることがわかります。
もちろん、質問にもよりますが、この例では、FREQUENCYIDという1つの条件でフィルタリングする場合を示します。後で(おそらく動的クエリを使用して)他の基準を持つことが予想され、それによってフィルタリングされる場合は、インデックスが理にかなっています。 –