Bitmap halaman dibuat secara dinamis untuk setiap kueri. Itu tidak di-cache atau digunakan kembali, dan dibuang di akhir pemindaian indeks bitmap.
Tidak masuk akal untuk membuat bitmap halaman terlebih dahulu karena isinya bergantung pada predikat kueri .
Katakanlah Anda sedang menelusuri x=1 and y=2
. Anda memiliki indeks b-tree pada x
dan y
. PostgreSQL tidak menggabungkan x
dan y
menjadi bitmap kemudian mencari bitmap. Ini memindai indeks x
untuk alamat halaman semua halaman dengan x=1
dan membuat bitmap di mana halaman yang mungkin berisi x=1
benar. Kemudian memindai y
mencari alamat halaman di mana y
mungkin sama dengan 2
, membuat bitmap dari itu. Kemudian AND membuat mereka menemukan halaman di mana keduanya x=1
dan y=2
mungkin benar. Akhirnya, ia memindai tabel itu sendiri, hanya membaca halaman yang mungkin berisi nilai kandidat, membaca setiap halaman dan hanya menyimpan baris di mana x=1 and y=2
.
Sekarang, jika Anda mencari sesuatu seperti indeks bitmap yang dibuat sebelumnya dalam cache, ada hal seperti itu di PostgreSQL 9.5:indeks BRIN . Ini ditujukan untuk tabel yang sangat besar, dan menyediakan cara untuk menemukan rentang tabel yang dapat dilewati karena diketahui tidak berisi nilai yang diinginkan.