Напишите, пожалуйста.
Кратко:
У меня в таблице id (uuid), asset_id (uuid), date_time (timestamp) и десяток NUMERIC колонок (spin_gen, spin_clr, etc). date_time ежечасный (24 записи на каждый день).
Я делаю расчёт SMA, Cumulative sum, sum, avg для каждого asset_id (штук 70). Если я высчитываю по дням, то за 1.8сек (второй за 0.8) отрабатывает, если считаю всё по часам, то за 7.3 секунды.
Пример запроса (колнки spin_gen, spin_clr numeric. Таких у меня 10 колонок.
SELECT 'day' AS VIEW, asset_id, _assets.NAME AS asset_name, _assets.company_name AS asset_owner, to_char( date_view, 'YYYY-MM-DD HH24:MI:SS' ) AS DATE, checksum :: NUMERIC, json_build_object (
'avg',spin_avg,
'sum',spin_sum,
'cusum',COALESCE ( SUM ( spin_sum ) OVER ( PARTITION BY asset_id ORDER BY date_view ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), 0 )
) AS spin
FROM (
SELECT date_trunc('hour', date_time) as date_view, COUNT ( date_time ) AS checksum, asset_id, AVG ( spin_clr + spin_gen ) AS spin_avg, SUM ( spin_clr + spin_gen ) AS spin_sum
FROM cmy_table
WHERE date_time BETWEEN '2022-01-01T00:00:00' AND '2022-12-31T23:59:00' AND asset_id IN ( SELECT ID FROM assets )
GROUP BY date_view, asset_id
-- ORDER BY
-- date_view
) T INNER JOIN assets _assets ON _assets.ID IN ( T.asset_id )
P.S. можно лично, за вознаграждение)
что хотите улучшить? что не устраивает?
Я хочу понять, правильно вообще ход мысли у меня или есть лучше варианты (быстрее)
https://t.me/pgsql/303899
v13.3, https://explain.tensor.ru/archive/explain/560872bf504d3cdeacea883f8ccdaf8a:0:2022-06-11
Обсуждают сегодня