これは OLTP アプリケーションであるため、ほとんどの場合、ビットマップ インデックスは使用したくないでしょう。ビットマップ インデックスは、OLTP アプリケーションではうまく機能しない傾向があります。データに対して多くの単一行操作を行うと、サイズが非常に急速に大きくなる傾向があります (ただし、この影響は最近のバージョンでは軽減されています)。しかし、より重要なことは、ロックの影響により、アプリケーションのスケーラビリティが大幅に低下する傾向があることです。たとえば、にビットマップ インデックスがある場合CategoryID
、単一の行を更新するには、ソースまたはターゲット値のいずれか CategoryID
を持つテーブル内のすべての行を事実上ロックする必要があります。CategoryID
せいぜい、( AgeGroupID
, CategoryID
) と ( CategoryID
, ) の複合インデックスが必要なようですAgeGroupID
。AgeGroupID
場合によっては、( , )で複合インデックスのみをCategoryID
使用し、 のみが指定されている場合に Oracle にインデックス スキップ スキャンを使用させることができCategoryID
ます。それは、作成するトレードオフによって異なります。複数のインデックスを使用するCategoryID
と、DML 操作での追加のインデックス メンテナンスと追加のディスク領域の使用を犠牲にして、クエリがより効率的になります。
パーティショニングを使用するライセンスはありますか? これは、エンタープライズ エディションのライセンスに追加される追加料金のオプションです。おそらく、テーブルを分割できると思います。ただし、わずか 100,000 行のテーブルは、パーティショニングを検討するにはかなり小さいものです。また、どのようにパーティション分割しても、パーティション キーを使用しないクエリの効率が低下する傾向があります。指定するクエリが(またはその逆)AgeGroupID
よりもはるかに一般的であることがわかっている場合、それは理にかなっているかもしれませんが、それはあなたが説明しているようには聞こえません。CategoryID