在一段时间内以相等的间隔对Mins和Maxs进行高效的PostgreSQL查询

时间:2014-09-08 13:19:40

标签: sql postgresql

我正在使用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万点。

...谢谢

1 个答案:

答案 0 :(得分:0)

很抱歉。这实际上是我的问题,看起来这篇文章的作者感冒了所以我不要求他编辑它。我发布了更好的"问题在这里 - Slow PostgreSQL Query for Mins and Maxs within equal intervals in a time period。你可以关闭这个问题吗?