【发布时间】:2014-11-01 17:30:25
【问题描述】:
我正在使用 Postgres v9.2.6。
拥有一个包含大量测量设备的系统。这些测量值存储在 包含三个字段的表格。
- device_id
- 测量(索引)
- 时间(索引)
一年内可能进行 1000 万次测量。大多数情况下,用户只对特定时期内等间隔内的 100 分钟最大配对感兴趣,例如过去 24 小时或过去 53 周。为了获得这 100 分钟和最大值,周期分为 100 个相等的间隔。从每个间隔中提取最小值和最大值。您会推荐最有效的数据查询方法吗?到目前为止,我已经尝试了以下查询:
WITH periods AS (
SELECT time.start AS st, time.start + (interval '1 year' / 100) AS en FROM generate_series(now() - interval '1 year', now(), interval '1 year' / 100) AS time(start)
)
SELECT * FROM sample_data
JOIN periods
ON created_at BETWEEN periods.st AND periods.en AND
customer_id = 23
WHERE
sample_data.id = (SELECT id FROM sample_data WHERE created_at BETWEEN periods.st AND periods.en ORDER BY sample ASC LIMIT 1)
这种测试方法在 MacBook Pro 上测试了 100 万个点,耗时超过一分钟。
谢谢...
【问题讨论】:
-
id是否已编入索引?这似乎有助于查询。 -
请阅读stackoverflow.com/tags/postgresql/info中的“如何提出好问题”并相应地编辑您的问题,然后在完成后在此处发表评论。
标签: sql postgresql