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

クエリプランのビットマップヒープスキャンとは何ですか?

    最良の説明は、私が誤解しない限り、アルゴリズムの作成者であるTomLaneからのものです。ウィキペディアの記事も参照してください。

    要するに、それはseqスキャンに少し似ています。違いは、すべてのディスクページにアクセスするのではなく、ビットマップインデックスが該当するインデックスのANDとORを一緒にスキャンし、必要なディスクページにのみアクセスすることです。

    これは、インデックスが行ごとに順番にアクセスされるインデックススキャンとは異なります。つまり、ディスクページが複数回アクセスされる可能性があります。

    Re:コメントの質問...うん、それだけだ。

    インデックススキャンは行を1つずつ調べ、必要な回数だけディスクページを開きます(もちろんメモリに残るものもありますが、要点はわかります)。

    ビットマップインデックススキャンは、ディスクページのショートリストを順番に開き、各ページの該当するすべての行を取得します(したがって、クエリプランに表示されるいわゆる再チェック条件)。

    余談ですが、クラスタリング/行の順序がどちらの方法でも関連するコストにどのように影響するかに注意してください。行がランダムな順序で配置されている場合、ビットマップインデックスの方が安価になります。 (そして、実際、それらが本当にすべてである場合 ビットマップインデックススキャンにはオーバーヘッドがないわけではないので、その場で、seqスキャンが最も安価になります。)




    1. SpringJDBCで現在のConnectionオブジェクトを取得する方法

    2. ここで、1=1ステートメント

    3. PostgresイベントトリガーからSQLテキストを取得する方法

    4. SQLServerで現在の日時から過去7日間までの過去7日間のデータを取得する方法