"ビットマップヒープスキャン"の原則を知りたいのですが、この条件でOR
を使ってクエリを実行すると、よくこのことが起こることがわかります 。クエリプランで「ビットマップヒープスキャン」とは何ですか?
「ビットマップヒープスキャン」の原則について、誰が説明できますか?
"ビットマップヒープスキャン"の原則を知りたいのですが、この条件でOR
を使ってクエリを実行すると、よくこのことが起こることがわかります 。クエリプランで「ビットマップヒープスキャン」とは何ですか?
「ビットマップヒープスキャン」の原則について、誰が説明できますか?
私が間違っていない限り、アルゴリズムの著者である最も良い説明はfrom Tom Laneです。 wikipedia articleも参照してください。
要するに、seqスキャンのようなビットです。違いは、すべてのディスクページを訪問するのではなく、ビットマップインデックススキャンでANDとORの適用可能なインデックスをまとめて、必要なディスクページだけを訪問することです。
これはインデックスが行ごとに順番に訪れるインデックススキャンとは異なります。つまり、ディスクページが複数回アクセスされる可能性があります。
Re:あなたのコメントの質問...はい、まさにそれです。
索引スキャンは、ディスク・ページを必要なだけ何度も何度も開いて、行を1つずつ順番に実行します(もちろん、メモリには残っていますが、その点が分かります)。
ビットマップインデックススキャンは、ディスクページの短いリストを順次開き、それぞれの該当する行をすべて取得します(クエリプランに表示される再確認条件)。
クラスタ化/行の順序が、どちらの方法でも関連するコストにどのように影響するかを脇に留めています。行がランダムな順序ですべての場所にある場合、ビットマップインデックスは安くなります。 (そして、実際にはすべての場合、ビットマップインデックススキャンではオーバーヘッドがないため、seqスキャンが最も安いでしょう)
"ビットマップヒープスキャン":ページ複数回訪問することはできません!しかし「索引ができます」:索引が順番に行ごとに訪問されるため、ページは複数回訪問することができます。 – francs