我有一个存储在PostgreSQL数据库中的值的时间序列(例如,股票市场价格的随机游走)。这是一个非常大的表,我希望能够同样快速地处理任意时间跨度的查询。我心中有this chart,我想知道他们是怎么做到的。
一个简单的例子:
WITH t(ts, val) AS ( VALUES
('2012-10-04 00:00:00'::timestamp, 1.11::numeric),
('2012-10-04 00:00:01', 1.21),
('2012-10-04 00:00:02', 1.25),
('2012-10-04 00:00:03', 1.41),
('2012-10-04 00:00:04', 1.31),
('2012-10-04 00:00:05', 1.25),
('2012-10-04 00:00:06', 1.33))
(假设时间戳列上有一个索引。)该表很大,并且需要很长时间来检索例如一年四分之一的时间跨度的所有值。但是,由于我想对这些数据做的只是制作一个可视化全局趋势的图,我并不需要从那个时期获得整个数据集,但代表性的子集会没问题。
我想到的事情:
AVG()
和date_trunc('hour', ts)
或类似的分组(但这会更快吗?可能会创建另一个包含预聚合值的表吗?)有没有可行的方法来实现这一目标?
答案 0 :(得分:1)
我的第一个冲动是使用聚合数据创建物化视图。这应该非常快(不计算创建它的一次性操作。)
除此之外,如果您不想在数据库中创建更多对象,(真正)随机选择与索引相结合可能会快速且有效。
根据表格的具体情况和实际尺寸以及结果准确程度的要求,您可以将某些内容从along these lines拉出来,这可能会相对较快。