优化时间刻度查询

时间:2018-01-31 18:20:13

标签: pdo psql postgresql-9.6 timescaledb

我使用以下查询与timescaledb从刻度数据库中获取10分钟的蜡烛。

SELECT time_bucket('10minute', time) AS min,
 first(ticks, time) AS open,
 last(ticks, time) AS close,
 max(ticks) AS high,
 min(ticks) AS low,
 last(volume, time)-first(volume, time) AS vol
FROM prices
WHERE asset_code = '".$symbol."'
GROUP BY min
ORDER BY min DESC
LIMIT 100

我希望确保查询在数据库增长后的几天内不会减慢速度。在任何时候,我想在最近两天的刻度线上运行此查询,而不是整个表格。所以我想知道有没有办法限制来自db的最后100000个滴答的time_bucket查询。

我也在使用PDO进行查询db。

1 个答案:

答案 0 :(得分:5)

TimescaleDB使用约束排除来消除在回答查询时需要触摸块。我们现在正在进行一些工作,以扩展查询优化,以更智能地处理某些类型的LIMIT查询,如您的示例中所示,以便即使上面只会触及必要的块。

但是现在,这是一个非常简单的修复:在WHERE子句中使用时间谓词而不是LIMIT。

特别是,假设您通常在每10分钟间隔中有一个股票代码,并且您需要100个区间:

SELECT time_bucket('10 minutes', time) AS min,
  first(ticks, time) AS open,
  ...
FROM prices
WHERE asset_code = '".$symbol."'
  AND time > NOW() - interval '1000 minutes'
GROUP BY min
ORDER BY min DESC