Eu tenho uma tabela com duas colunas cujos valores têm uma correlação linear perfeita, por exemplo
CREATE TABLE measurements (
sensor int PRIMARY KEY,
num serial PRIMARY KEY,
time timestamptz DEFAULT now(),
value float
);
-- many times:
INSERT INTO measurements(sensor, value) VALUES ($1, $2);
Tanto the time
quanto the num
estão aumentando monotonamente, uma linha com num
valor mais alto também terá um time
valor maior.
O Postgres criará um índice btree nas colunas de chave primária. De alguma forma, posso dizer a ele para também usar o mesmo índice ao consultar linhas por seu time
em vez de por seu num
? Como em
SELECT * FROM measurements WHERE sensor = $1 AND time >= $2 ORDER BY time;
As linhas resultantes teriam exatamente a mesma ordem como se fossem classificadas por num
.
Existe uma maneira de informar o otimizador? Eu vi muitos artigos sobre estatísticas de correlação de colunas cruzadas, a maioria deles vinculada neste tópico do StackOverflow , mas as estatísticas de várias colunas parecem analisar apenas dependências entre valores individuais e não conseguem fazer uma correlação linear .
Eu esperava alcançar o mesmo resultado como se eu criasse outro índice no sensor, time
, mas o postgres precisa manter e armazenar apenas um único índice.