Digamos que eu tenha uma tabela foos
com coluna thing_id
.
Qual é o menor índice que eu poderia fazer para essas consultas?
select count(*) from foos where thing_id is null;
select id from foos where thing_id is null;
Conceitualmente, precisamos apenas do índice para acompanhar uma lista de chaves primárias que correspondem aos critérios. É possível/útil criar um índice parcial em... sem colunas?
Eu tentei isso e o postgres considerou um erro de sintaxe:
create index on foos where thing_id is null;
Isso funcionou
create index on foos (thing_id) where thing_id is null;
Mas isso resultará em escrever desnecessariamente o valor de thing_id (sempre NULL) para cada linha?
Você sempre precisa de uma coluna em um índice.
Você pode tentar indexar uma constante que ocupa apenas um byte:
Se você escolher
boolean
, isso seriaMas minha recomendação é indexar
id
. Claro, isso tornaria o índice um pouco maior, mas sua segunda consulta poderia usar uma varredura somente de índice muito mais rápida.