Le bitmap des pages est créé dynamiquement pour chaque requête. Il n'est ni mis en cache ni réutilisé, et est supprimé à la fin de l'analyse de l'index bitmap.
Cela n'a pas de sens de créer le bitmap de la page à l'avance car son contenu dépend des prédicats de la requête .
Supposons que vous recherchiez x=1 and y=2
. Vous avez des index b-tree sur x
et y
. PostgreSQL ne combine pas x
et y
dans un bitmap puis recherchez le bitmap. Il scanne l'index x
pour l'adresse de la page de toutes les pages avec x=1
et crée un bitmap où les pages qui pourraient contenir x=1
sont vrai. Ensuite, il scanne y
rechercher les adresses de page où y
peut être égal à 2
, en créant un bitmap à partir de cela. Ensuite, il leur fait un ET pour trouver des pages où les deux x=1
et y=2
pourrait être vrai. Enfin, il parcourt la table lui-même, ne lisant que les pages susceptibles de contenir des valeurs candidates, lisant chaque page et ne conservant que les lignes où x=1 and y=2
.
Maintenant, si vous cherchez quelque chose comme un index bitmap pré-construit en cache, il y a une telle chose dans PostgreSQL 9.5 :Index BRIN . Celles-ci sont destinées aux très grandes tables et offrent un moyen de trouver des plages de la table qui peuvent être ignorées car elles sont connues pour ne pas contenir une valeur souhaitée.