[解決済み] クエリプランにおける「ビットマップヒープスキャン」とは何ですか?
2022-04-26 14:57:07
質問
ビットマップヒープスキャンの原理を教えてください。
でクエリを実行した場合
OR
を条件とします。
ビットマップヒープスキャン(quot;Bitmap heap scan")の原理を説明できる人はいますか?
どのように解決するのですか?
最適な説明は トム・レーン 私が間違っていなければ、このアルゴリズムの作者である。また ウィキペディアの記事 .
要するに、seqスキャンと同じようなものです。違いは、すべてのディスクページを訪れるのではなく、ビットマップインデックススキャンは該当するインデックスを一緒にANDとORし、必要なディスクページのみを訪問することです。
これはインデックススキャンとは異なり、インデックスを行ごとに順番に訪問するため、ディスクページが複数回訪問される可能性があります。
Re: コメントにある質問について... はい、その通りです。
インデックススキャンは行を1つずつ調べ、必要なだけ何度もディスクページを開きます(もちろん一部はメモリに残りますが、要点はおわかりでしょう)。
ビットマップインデックススキャンは、短いディスクページのリストを順次開き、それぞれのページで該当する行をすべて取得します(そのため、クエリプランで見られるいわゆる再チェックマンションが発生します)。
余談ですが、クラスタリングや行の順番がどちらの方法でも関連するコストに影響を与えることに注意してください。もし行があちこちに散らばっていて、その順番がランダムであれば、ビットマップインデックスの方が安くなります。(そして、実際、もし行が本当に すべて ビットマップインデックススキャンはオーバーヘッドがないわけではないので、seqスキャンが最も安くなります)。
関連
-
Postgresqlへのリモートアクセスの設定方法(ファイアウォールの設定またはOFFが必要です。)
-
postgreSQLのクエリ結果に自己インクリメントシーケンス演算が追加されました。
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)
-
[解決済み] psql: FATAL: データベース "<user>" が存在しない
-
[解決済み] 未知語からテキストへの変換関数の検索に失敗しました。
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
-
[解決済み] Postgres の全テーブルの行数を求めるには?
-
[解決済み] PostgreSQL で "use database_name" コマンドを使用する。
-
[解決済み] MySQL のインデックスはどのように機能するのですか?
-
[解決済み】ilocとlocはどう違うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PostgreSQLでバッファキャッシュにデータを読み込む方法
-
どのように定期的にLinux上でpostgresqlのデータベースをバックアップする
-
Postgresqlのセルフインクリメントidをキーにした場合の重複問題の解決
-
Postgresqlのデータベースにおける配列の作成と変更に関する操作
-
[解決済み] PostgreSQLデータベースにアクティブな接続がある場合、そのデータベースを削除する方法は?
-
[解決済み] PostgreSQLで重複して更新された場合の挿入?
-
[解決済み] Postgresqlで「大文字小文字を区別しない」クエリを作成する方法は?
-
[解決済み] varcharフィールドの型をintegerに変更する。"自動的にinteger型にキャストすることはできません"
-
[解決済み] Postgresqlで「挿入無視」と「重複キー更新」(SQLマージ)をエミュレートする方法は?
-
[解決済み] PostgreSQLでタイムスタンプの差を秒単位で求める