postgresql - 为一组 id 的大表有效地获取最大时间戳
问题描述
我有一个大型 PostgreSQL 数据库表(实际上有很多分区表按年度季度划分),为简单起见,它被定义为
id bigint
ts (timestamp)
value (float)
对于一组特定的 id,在表中为每个指定的 id 找到最后一个时间戳的有效方法是什么?
该表由(id,timestamp)索引
如果我做一些天真的事情
SELECT sensor_id, MAX(ts)
FROM sensor_values
WHERE ts >= (NOW() + INTERVAL '-100 days') :: TIMESTAMPTZ
GROUP BY 1;
事情进展得很慢。
有没有办法通过对一个 id 进行二分搜索来缩小时间范围(我可以假设时间戳对于一组特定的 id 是相似的)
我正在通过 psycopg 访问数据库,因此如果我遗漏了一些容易加快速度的东西,解决方案可以是代码或 SQL。
查询的解释可以在这里看到。https://explain.depesz.com/s/PVqg
任何想法表示赞赏。
解决方案
推荐阅读
- python - 关于如何存储数据的建议
- java - 将 Micronaut 与 Hashicorp Vault 连接起来
- c - 使用 termcaps 删除输出
- oracle - 在 Oracle PLSQL 中使用潜台词在文本中搜索
- java - Hazelcast Jet 与 Java 8 流
- javascript - 如何使用 Sequelize ORM 强制复合外键存在?
- android - 将 sqlite-net-pcl 与 Xamarin.Forms 一起使用时,创建连接的最佳做法是什么
- .net - 如何使用 Autofac 处理内部构造函数
- php - PHP Quickbooks API SDK - 报告
- python - 如何在使用递归时使用 Python 确保单词是回文?