Certamente é. Discutimos isso em detalhes na questão relacionada:
O espaço é alocado em múltiplos de MAXALIGN, normalmente 8 bytes em um sistema operacional de 64 bits ou (muito menos comum) 4 bytes em um sistema operacional de 32 bits. Se você não tiver certeza, verifique pg_controldata. Também depende dos tipos de dados das colunas indexadas (algumas requerem preenchimento de alinhamento) e do conteúdo real.
Um índice em, digamos, duas integercolunas (4 bytes cada) normalmente acaba exatamente do tamanho de um índice em apenas uma, onde outros 4 bytes são perdidos no preenchimento do alinhamento.
Nesse caso, não há realmente nenhuma desvantagem para o planejador de consultas usar um índice (a,b)- comparado a um índice apenas (a). E geralmente é preferível que várias consultas usem o mesmo índice. A chance de ele (ou parte dele) residir no cache (rápido) aumenta quando compartilhada.
Se você já mantém um índice ativado (a,b), não faz sentido criar outro índice apenas (a)- a menos que seja substancialmente menor. O mesmo não vale para (b,a)vs. (a). Siga o link na primeira linha para saber mais sobre isso.
Vindo da direção oposta, quando você precisar de um índice adicional como esse (a,b), considere soltar um índice existente apenas (a)- se possível. Geralmente não é possível, pois esse é o índice de uma PK ou UNIQUErestrição. Desde o Postgres 11, você pode simplesmente anexar bà definição de restrição com a INCLUDEcláusula. Detalhes no manual.
Ou crie o novo índice (b,a)para cobrir consultas apenas badicionalmente. Somente para condições de igualdade, a ordem das expressões de índice nos índices btree não importa. Porém, quando envolve condições de alcance. Vejo:
Existem possíveis desvantagens em incluir colunas adicionais em um índice, mesmo que isso use apenas o espaço perdido para o preenchimento do alinhamento:
- Sempre que a coluna adicional é atualizada, o índice agora também precisa de uma atualização, o que pode aumentar o custo das operações de gravação e criar mais inchaço no índice.
- As atualizações HOT (Heap Only Tuple) na tabela não são possíveis enquanto estiver envolvida qualquer coluna de índice.
Mais sobre atualizações HOT:
Como medir tamanhos de objeto: