ページのビットマップは、クエリごとに動的に作成されます。キャッシュまたは再利用されず、ビットマップインデックススキャンの最後に破棄されます。
その内容はクエリ述語に依存するため、事前にページビットマップを作成することは意味がありません。 。
x=1 and y=2
を検索しているとします。 。 x
にbツリーインデックスがあります およびy
。 PostgreSQLはx
を結合しません およびy
ビットマップに入れてから、ビットマップを検索します。インデックスx
をスキャンします x=1
のすべてのページのページアドレス x=1
を含む可能性のあるページにビットマップを作成します 本当です。次に、y
をスキャンします y
のページアドレスを探しています 2
に等しい可能性があります 、そこからビットマップを作成します。次に、それらをANDして、両方がx=1
であるページを検索します。 およびy=2
本当かもしれません。最後に、テーブル自体をスキャンし、候補値を含む可能性のあるページのみを読み取り、各ページを読み取り、x=1 and y=2
の行のみを保持します。 。
キャッシュされたビルド済みのビットマップインデックスのようなものを探している場合、PostgreSQL9.5には次のようなものがあります。