【问题标题】:Efficient PostgreSQL Query for Mins and Maxis withing equal intervals in a time period在一个时间段内以相等的间隔对 Mins 和 Maxis 进行高效的 PostgreSQL 查询
【发布时间】: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 万个点,耗时超过一分钟。

谢谢...

【问题讨论】:

标签: sql postgresql


【解决方案1】:

对此感到抱歉。这实际上是我的问题,看起来这篇文章的作者感冒了,所以我不能要求他编辑它。我在这里发布了“更好”的问题 - Slow PostgreSQL Query for Mins and Maxs within equal intervals in a time period。能否请您结束这个问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2014-10-26
    相关资源
    最近更新 更多