我有一個查詢(帶有子查詢),可以計算前幾年的平均溫度,每天加/減一週。它有效,但並不是那麼快。下面的時間序列值只是一個例子。爲什麼我使用doy
是因爲我想在每年的同一日期附近有一個滑動窗口。PostgreSQL優化:日期範圍內的平均值
SELECT days,
(SELECT avg(temperature)
FROM temperatures
WHERE site_id = ? AND
extract(doy FROM timestamp) BETWEEN
extract(doy FROM days) - 7 AND extract(doy FROM days) + 7
) AS temperature
FROM generate_series('2017-05-01'::date, '2017-08-31'::date, interval '1 day') days
所以我的問題是,這個查詢可以以某種方式改進?我正在考慮使用某種窗口函數,或者可能使用lag
和lead
。但是,至少常規的窗口函數僅適用於特定數量的行,而在兩週窗口內可以進行任意數量的測量。
我可以和我現在所擁有的一樣,但隨着數據量的增長,查詢的執行速度也如此。後兩個extract
可以被刪除,但是沒有明顯的速度改進,只會使查詢不易讀。任何幫助將不勝感激。
搜索「優化搜索」,我建議提供現有查詢的解釋計劃術語。 –