sql >> データベース >  >> RDS >> Oracle

Bツリーとビットマップデータベースのインデックス

    ウィキペディアから: B-Trees およびビットマップインデックス 。ユースケース:

    • Bツリーは、CREATE INDEX ...を実行するときに使用される一般的なインデックスタイプです。 データベース内:

      1. インデックスデータのごく一部を選択する場合は非常に高速です(通常は最大5%〜10%)
    • 個別のインデックス値が多数ある場合は、より効果的に機能します。
    • 複数のBツリーインデックスを組み合わせることができますが、多くの場合、単純なアプローチの方が効率的です。
    • インデックス付きデータに個別の値がほとんどない場合、またはデータの大きなサブセット(通常は> 10%)を取得する場合は、これらは役に立ちません。
    • 各Bツリーインデックスは、インデックス付きテーブルの値を挿入/更新するときに小さなペナルティを課します。非常にビジーなテーブルに多数のインデックスがある場合、これは問題になる可能性があります。

    • この特性により、B-Treeインデックスは、一度に非常に小さなデータセットを処理し、ほとんどのクエリがIDでフィルタリングされ、優れた同時パフォーマンスが必要な場合に、OLTPアプリケーションでの検索を高速化するのに非常に役立ちます。

    • ビットマップインデックスは、より特殊なインデックスバリアントです:

      1. インデックス付きの値をビットマップとしてエンコードするため、スペース効率が非常に高くなります。
      2. 個別のインデックス値が少ない場合に、より適切に機能する傾向があります
      3. DBオプティマイザーは、インデックスが付けられた複数のビットマップを非常に簡単に組み合わせることができます。これにより、クエリで複雑なフィルターを効率的に実行できます。
      4. 値を挿入/更新するときは非常に非効率的です。


      ビットマップインデックスは、ETLプロセスを除いてデータベースが読み取り専用であるデータウェアハウスアプリケーションで主に使用され、通常、スタースキーマ 、ビットマップインデックスは、通常はあまり多くの個別の値を持たないディメンションテーブルの条件に基づいてフィルタリングを高速化できます。

    非常に簡単な要約として、データウェアハウスの開発者であり、知っている場合を除いて、Bツリーインデックス(ほとんどのデータベースでは「デフォルト」インデックス)を使用します。 ビットマップインデックスのメリットがあります。



    1. RDSスナップショットをダウンロードする

    2. MySQLとJavaで引用符文字をエスケープする方法

    3. EAVテーブルを使用してアイテムを結合/ピボットします

    4. PDOエラー-メッセージ「SQLSTATE[HY000]:一般エラー」を伴うPDOException'