(цель запроса: запрос должен вернуть внутри времянного отрезка определенное количество записей содержащих временную метку и значение соответствующее этой временной метке)
SELECT five_min1, MAX
FROM
(SELECT time_bucket('1 minute', time) AS five_min1, MAX(value)
FROM ts WHERE tag='1900' AND (time>'2021-12-20 00:00' AND time<'2021-12-20 12:00')
GROUP BY five_min1 ) as ts
INNER JOIN
(SELECT time_bucket('1 minutes', time) AS five_min
FROM (SELECT time FROM generate_series('2021-12-20 00:00'::timestamp,'2021-12-20 12:00', '77.28 second') as time) as q ) as q
ON ts.five_min1 = q.five_min
пояснение:
( период указанный (77.28 second) мне возвращает следующий запрос:
SELECT ((EXTRACT(EPOCH FROM timestamp '2021-12-20 12:00')) - (EXTRACT(EPOCH FROM timestamp '2021-12-20 00:00')))/559
559 это количество строк внутри двух меток времени(2021-12-20 00:00' ---- `2021-12-20 12:00',)которын необходимо чтобы вернул запрос
'ts' - это имя табицы в которой три поля : time - datestamp, value - numeric, tag - text.
интерено то что если я запрашиваю значения с tag= 1854 (это идентификатор параметра), ответ получаю через прмерно 7 секунд, если повторно выполняю запрос этот же ответ возвращается через ~500ms, если увеличиваю значенин tag незначительно то время выполнения почти не меняется ~500ms, если вмето 1854 запросить например 2100 тозапрос выполняется секунд 7 примерно (значений tag пишется в базу 700шт , начиная с номера 1717(1717-2416) частотой 1 раз в 5 секунд )
как ускорить выборку? 😭
https://t.me/pgsql/303899
1) версия psql 13.4 + timescaledb 2.4.2 2) SELECT five_min1, MAX FROM (SELECT time_bucket('1 minute', time) AS five_min1, MAX(value) FROM ts WHERE tag='1900' AND (time>'2021-12-14 00:00' AND time<'2021-12-20 00:00') GROUP BY five_min1 ) as ts INNER JOIN (SELECT time_bucket('1 minutes', time) AS five_min FROM (SELECT time FROM generate_series('2021-12-14 00:00'::timestamp,'2021-12-20 00:00', '48.26 second') as time) as q ) as q ON ts.five_min1 = q.five_min 3)\d+ts отношения не найдены 4) pastebin.com/s9B41x2c
Если действительно хотите — покажите все 4 (четыре), и именно те, которые указаны в пунктах. Целиком, текстом. В сторону: я уже не знаю, как это простое предложение ещё написать, чтобы хотя бы прочитали. :(
86 строк возвращает explain(analyze, bufers)
> 3)\d+ts > отношения не найдены Не \d+ts, а \d+ ts (забыли пробел). > 86 строк возвращает explain И все их надо показать, целиком. И да, раз уж у Вас 13.4, покажите сразу результат EXPLAIN (ANALYZE, BUFFERS, VERBOSE, SETTINGS) SELECT ....
спасибо понял, но текстом вствить лучше или фотогоафиями, потому что сами понимаете сложно в тексте будет тут увидеть чтото, да и размер сообщения не велик
"Фотографии" можете сразу выбросить, никто их тут смотреть не будет, я практически уверен. ;) Если что — есть же вложения (файлы) в telegram, paste sites, да и https://explain.depesz.com/ специально для демонстрации планов.
Обсуждают сегодня