我正在使用Postgres v9.2.6。
拥有一系列需要进行测量的设备。这些测量值存储在 有三个字段的表。
一年内可能有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万点。
...谢谢
答案 0 :(得分:0)
很抱歉。这实际上是我的问题,看起来这篇文章的作者感冒了所以我不要求他编辑它。我发布了更好的"问题在这里 - Slow PostgreSQL Query for Mins and Maxs within equal intervals in a time period。你可以关闭这个问题吗?