PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Entendendo índices de bitmap no postgresql


O bitmap de páginas é criado dinamicamente para cada consulta. Ele não é armazenado em cache ou reutilizado e é descartado no final da varredura de índice de bitmap.

Não faz sentido criar o bitmap da página antecipadamente porque seu conteúdo depende dos predicados da consulta .

Digamos que você esteja procurando por x=1 and y=2 . Você tem índices b-tree em x e y . PostgreSQL não combina x e y em um bitmap, em seguida, pesquise o bitmap. Ele verifica o índice x para o endereço de todas as páginas com x=1 e cria um bitmap onde as páginas que podem conter x=1 são verdadeiros. Em seguida, ele verifica y procurando os endereços das páginas onde y pode ser igual a 2 , fazendo um bitmap a partir disso. Em seguida, ele os faz AND para encontrar páginas em que x=1 e y=2 pode ser verdade. Finalmente, ele varre a tabela por conta própria, lendo apenas as páginas que podem conter valores candidatos, lendo cada página e mantendo apenas as linhas onde x=1 and y=2 .

Agora, se você está procurando por algo como um índice de bitmap pré-construído em cache, existe algo assim no PostgreSQL 9.5:Índices BRIN . Eles são destinados a tabelas muito grandes e fornecem uma maneira de localizar intervalos da tabela que podem ser ignorados porque são conhecidos por não conter um valor desejado.