在同一台机器内,为一个随机行获取相对于日期时间最近的N行



我有一个很大的表,里面有超过600GB的传感器时间序列数据。类似这样的东西:

时间戳00a2f91d-ffed-4794-b9d6-041ae7fa347c2021-01-28 00:00:33.000+0000300a2f91d-ffed-4794-b9d6-041ae7fa3as32021-01-28 00:00:35.000+0000300a2f91d-ffed-4794-b9d6-041ae7assg22021-01-28 00:00:38000+0000300a2f91d-ffed-4794-b9d6-041aisffass32021-01-28 00:00:45.000+000034

如果您有一个按机器和时间戳的索引,那么传统的索引扫描应该可以非常快速地从表中检索20行,如:

create index ix1 on t (machine_id, timestamp);

然后,让我们假设您的示例中的第三个随机行的值为(3, '2021-01-28 00:00:38.000 +0000')。您的查询看起来像:

select *
from t
where machine_id = 3
and timestamp < '2021-01-28 00:00:38.000 +0000'
order by timestamp desc
limit 20

由于引擎将遍历索引,并且只遍历20行,因此响应应该是即时的。

最新更新