Eu quero saber o princípio da "verificação de heap de bitmap", sei que isso geralmente acontece quando executo uma consulta com OR
a condição.
Quem pode explicar o princípio por trás de uma "varredura de heap de bitmap"?
fonte
Eu quero saber o princípio da "verificação de heap de bitmap", sei que isso geralmente acontece quando executo uma consulta com OR
a condição.
Quem pode explicar o princípio por trás de uma "varredura de heap de bitmap"?
A melhor explicação vem de Tom Lane , que é o autor do algoritmo, a menos que eu esteja enganado. Veja também o artigo da Wikipedia .
Resumindo, é um pouco como uma varredura de sequência. A diferença é que, em vez de visitar todas as páginas do disco, um índice de bitmap verifica os ANDs e ORs dos índices aplicáveis juntos e só visita as páginas do disco de que precisa.
Isso é diferente de uma varredura de índice, onde o índice é visitado linha por linha em ordem - o que significa que uma página do disco pode ser visitada várias vezes.
Re: a pergunta em seu comentário ... Sim, é exatamente isso.
Uma varredura de índice percorrerá as linhas uma a uma, abrindo as páginas do disco repetidamente, quantas vezes forem necessárias (algumas, é claro, ficarão na memória, mas você entendeu).
Uma varredura de índice de bitmap abrirá sequencialmente uma pequena lista de páginas de disco e pegará todas as linhas aplicáveis em cada uma (daí a chamada condição de nova verificação que você vê nos planos de consulta).
Observe, como um aparte, como o agrupamento / ordem das linhas afeta os custos associados a qualquer um dos métodos. Se as linhas estiverem espalhadas por toda parte em uma ordem aleatória, um índice de bitmap será mais barato. (E, de fato, se eles estiverem realmente em todos os lugares, uma varredura seq será mais barata, já que uma varredura de índice de bitmap não ocorre sem alguma sobrecarga.)
index-only scan
quando apenas a coluna indexada é acessada na consulta. neste caso,index-only scan
não precisa acessar os dados do heap (página de dados): postgresql.org/docs/12/indexes-index-only-scans.html