私は、前年度の平均気温をプラス/マイナス1日ごとに計算するクエリ(サブクエリ付き)を持っています。それは動作しますが、それほど高速ではありません。以下の時系列値は一例に過ぎません。私がなぜ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
を考えていた。しかし、少なくとも正規のウィンドウ関数は特定の行量でしか動作しませんが、2週間のウィンドウ内では任意の数の測定が可能です。
私は今のところ生きていますが、データ量が増えるほどクエリの実行速度も向上します。後者の2つのextract
は削除することができますが、速度の向上は目立たず、クエリの読みやすさが低下します。どんな助けでも大歓迎です。
用語を検索する「検索引数可能」と私は、既存のクエリの実行計画を提供することをお勧めします。 –