我的表json
(measurement_data
)中有measurement_data.data
列。这个哈希包含一堆数据,我的目标是在哈希中的几个字段中收集一些统计信息(一段时间,例如50秒)。我的结束查询看起来像
SELECT min(a) as min_a,
max(a) as max_a,
min((string_to_array(translate(data ->> 'b', '[]', ''), ','))[2]::int) as min_b,
max((string_to_array(translate(data ->> 'b', '[]', ''), ','))[2]::int) as max_b,
min((string_to_array(translate(data ->> 'c', '[]', ''), ','))[2]::int) as min_c,
max((string_to_array(translate(data ->> 'c', '[]', ''), ','))[2]::int) as max_c,
extract('epoch' from measured_at)::int / 50 as group_timestamp
FROM measurement_data,
unnest(
string_to_array(
translate(data ->> 'a', '[]', ''),
',')::int[]
) as rr_intervals
WHERE measurement_id = 1000 AND data ->> 'a' <> '[]'
group by group_timestamp
order by group_timestamp;
我的参数描述:
a
是值数组(例如[1300,200,400]),
b
和c
是两个值的数组:timestamp和value(例如[1528727921000,100])。我只需按值获取统计数据,因此我对时间戳不感兴趣。
一切正常并且返回正确的结果,除了一件事:它的工作太慢了。在10_000条记录上,请求需要约7秒。有没有办法改善这个要求的性能?