Planejando algumas tabelas novas, estou tentando decidir se um índice deve ser "crescente" ou "descendente".
A tabela será bem grande (imagino aproximadamente 2.000 inserções por minuto, migrando inicialmente de uma tabela diferente com cerca de 1 bilhão de linhas).
Usarei a extensão timescaledb para isso (para particionamento por tempo).
É assim que a tabela pode ser criada:
create table "Sample"(
"id" bigserial,
"deviceId" int not null,
"timestamp" timestamptz not null,
"value" float8 not null
);
select create_hypertable('"Sample"', 'timestamp'); -- creates a desc index on "timestamp"
create index on "Sample"("deviceId", "timestamp"); -- should this be "desc"?
Estas são as duas consultas mais comuns que executaremos (deviceId e timestamps podem variar, é claro):
select "timestamp", "value"
from "Sample" where "deviceId"=123 and "timestamp"<'2024-01-01Z'
order by "timestamp" desc limit 1;
E
select "timestamp", "value"
from "Sample" where "deviceId"=123 and "timestamp" between '2024-01-01Z' and '2024-02-01Z'
order by "timestamp" asc;
Então, o que estou tentando entender é em que ordem o "carimbo de data e hora" deve estar? E porque?
Minha intuição (provavelmente errada) me diz que o índice com "timestamp" deveria estar em ordem crescente, pois preciso ordenar os dados por timestamp em ordem crescente .
Porém, os exemplos na documentação da escala de tempo sempre indexam as colunas de tempo em ordem decrescente. Eu não entendo muito bem o porquê.
Qual é a escolha ideal de índices aqui?