このトピックでは、ビットマップインデックスとその適用可能なシナリオについて説明します。
背景情報
ビットマップインデックスは、Oracleデータベースで使用される特殊なタイプのインデックスです。 このタイプのインデックスは、低濃度フィールドのクエリ速度を向上させるのに役立ちます。 ロックの粒度が大きいため、ビットマップインデックスは頻繁に更新されるフィールドには適していません。
PolarDB for Oracleデータベースでは、低濃度フィールドにBツリーインデックスを作成して、クエリ速度を向上させることができます。 さらに、Bツリーインデックスは、ロックの粒度が大きいことによるデータベースのパフォーマンスの低下を防ぎます。
解決策
個別のフィールド値の数に基づいて、フィールドのカーディナリティを評価できます。 フィールドに多数の異なる値がある場合、フィールドのカーディナリティは高くなります。 フィールドに関連するSQLクエリ文が必要な場合は、フィールドにBツリーインデックスを作成することをお勧めします。 フィールドが少数の別個の値を有する場合、フィールドは低いカーディナリティを有する。 フィールドにインデックスを作成しないことをお勧めします。
例
- 例 1
Oracleデータベースの表Aの名前列はカーディナリティが高く、名前列にビットマップ・インデックスが作成されます。 テーブルをPolarDB for Oracleデータベースに移行した後、name列にBツリーインデックスを作成できます。
- 例 2
表Aのステータス列は、低いカーディナリティを有する。 列の値の90% は1であり、10% は0である。 status列の値が1であるデータレコードをクエリする必要がある場合は、status列にインデックスを作成しないことをお勧めします。 status列の値が0のデータレコードを照会する必要がある場合は、status列にBツリーインデックスを作成することを推奨します。