规划一些新表,我试图决定索引应该是“升序”还是“降序”。
该表将非常大(我想象每分钟大约有 2000 次插入,最初从大约有 10 亿行的不同表迁移)。
我将为此使用 timescaledb 扩展(按时间进行分区)。
这是创建表的方式:
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"?
这是我们将运行的两个最常见的查询(当然,deviceId 和时间戳可能会有所不同):
select "timestamp", "value"
from "Sample" where "deviceId"=123 and "timestamp"<'2024-01-01Z'
order by "timestamp" desc limit 1;
和
select "timestamp", "value"
from "Sample" where "deviceId"=123 and "timestamp" between '2024-01-01Z' and '2024-02-01Z'
order by "timestamp" asc;
所以我想了解的是“时间戳”应该按什么顺序排列?为什么?
我的(可能错误的)直觉告诉我带有“时间戳”的索引应该按升序排列,因为我需要按时间戳升序对数据进行排序。
但是,时间刻度文档中的示例总是按降序对时间列进行索引。我不太明白为什么。
这里理想的指数选择是什么?