No postgres, estou fazendo uma consulta em 2 colunas
- string
type
com apenas 3 valores possíveis - carimbo de data/hora
the_timestamp
a consulta é
select id from my_table where type = 'a-value' and the_timestamp < '2024-03-01'
- Qual é a melhor ordem do índice para esta consulta? Acredito que existam essas sugestões, que entram em conflito
- igualdade primeiro, intervalos depois
- "maior cardinalidade primeiro" (apenas para correspondência, não para intervalo?)
- Faz muita diferença se o índice em the_timestamp for
desc
orasc
, ou isso só faz diferença ao percorrer várias colunas com consultas de intervalo... ou fazerBETWEEN
algo assim?
A “cardinalidade mais alta” não faz muito sentido com uma desigualdade. Provavelmente também não faz muito sentido com um intervalo, a menos que o intervalo seja sempre muito estreito.
A melhor ordem para essa consulta é claramente
(type, the_timestamp)
. Você pode incluir "id" no final para obter uma verificação apenas do índice. No entanto, a ordem inversa das colunas provavelmente será "boa o suficiente" para esta consulta, embora seja muito mais útil para uma consulta que não especifique o tipo. Então, se você não quiser ter um índice para cada consulta, então(the_timestamp, type)
poderia muito bem ser melhor no geral.O que importa é ASC e DESC se você deseja oferecer suporte a uma consulta com algo como
ORDER BY A DESC, B ASC
. Caso contrário, isso realmente não importa porque o PostgreSQL sabe como ler um índice para frente ou para trás