Мне было интересно, как я могу ускорить этот запрос с помощью индексов или чего-то еще, если это вообще возможно. Я не знаю, возможно ли это с моим текущим запросом.
Запрос выглядит следующим образом:
SELECT
id,
metric,
out_metric,
run_every,
last_downsampled_window,
query,
(last_updated + run_every)::bigint - $1 AS time_until_update
FROM downsamplers
WHERE worker_id = $2
ORDER BY time_until_update ASC
LIMIT 1;
Где $1
— текущая метка времени unix в нано. А $2
— это просто идентификатор.
А схема таблицы выглядит так:
CREATE TABLE downsamplers (
id serial,
metric text,
out_metric text,
run_every bigint,
last_downsampled_window bigint,
last_updated bigint NOT NULL,
worker_id int,
query jsonb
)
В основном я использую этот запрос, чтобы получить элемент от субдискретизаторов с самым ранним time_until_update.
Создание индекса для worker_id поможет, если таблица содержит много данных.
Отметил благодарности. Однако я надеялся оптимизировать аспект
time_until_update
.Это не "временная переменная" - это псевдоним столбца