优化时间刻度查询
Optimize timescale query
我将以下查询与 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
我想确保几天后随着数据库的增长查询不会变慢。任何时候我都想 运行 这个查询最近两天的报价而不是整个 table。所以我想知道有没有一种方法可以限制 time_bucket
查询来自 db.
的最后 100000 个报价
我也在使用 PDO 查询数据库。
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
我将以下查询与 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
我想确保几天后随着数据库的增长查询不会变慢。任何时候我都想 运行 这个查询最近两天的报价而不是整个 table。所以我想知道有没有一种方法可以限制 time_bucket
查询来自 db.
我也在使用 PDO 查询数据库。
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