例如,我有一个包含两列的表,其值具有完美的线性相关性
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);
thetime
和 thenum
都是单调递增的,值越大的行num
也会有越大的time
值。
Postgres 将在主键列上创建一个 btree 索引。我可以以某种方式告诉它在按他们而不是按他们查询行时也使用相同的索引吗?如在time
num
SELECT * FROM measurements WHERE sensor = $1 AND time >= $2 ORDER BY time;
结果行的顺序与按 排序时的顺序完全相同num
。
有没有办法让优化器知道?我看过很多关于跨列相关统计的文章,大部分都链接在这个 StackOverflow 主题中,但是多列统计似乎只分析单个值之间的依赖关系,无法进行线性相关。
我希望获得与在 上创建另一个索引相同的结果sensor, time
,但 postgres 只需要维护和存储一个索引。
不,您不能使用一列上的索引来搜索另一列。我第二个 Jasens 评论说,您应该考虑取消生成的整数并改用时间戳。