El mapa de bits de las páginas se crea dinámicamente para cada consulta. No se almacena en caché ni se reutiliza, y se descarta al final de la exploración del índice de mapa de bits.
No tiene sentido crear el mapa de bits de la página por adelantado porque su contenido depende de los predicados de la consulta .
Digamos que estás buscando x=1 and y=2
. Tiene índices de árbol b en x
y y
. PostgreSQL no combina x
y y
en un mapa de bits y luego busque en el mapa de bits. Escanea el índice x
para la dirección de página de todas las páginas con x=1
y crea un mapa de bits donde las páginas que pueden contener x=1
son verdaderas. Luego escanea y
buscando las direcciones de la página donde y
podría ser igual a 2
, haciendo un mapa de bits a partir de eso. Luego les aplica AND para encontrar páginas donde ambos x=1
y y=2
podría ser cierto Finalmente, escanea la tabla por sí mismo, leyendo solo las páginas que pueden contener valores candidatos, leyendo cada página y manteniendo solo las filas donde x=1 and y=2
.
Ahora, si está buscando algo como un índice de mapa de bits preconstruido en caché, existe tal cosa en PostgreSQL 9.5:Índices BRIN . Estos están destinados a tablas muy grandes y proporcionan una forma de encontrar rangos de la tabla que se pueden omitir porque se sabe que no contienen un valor deseado.