Реализована следующая схема, упрощенно(есть массив данных с параметрами и значением(поле _value))
данных много, пользователь в таблице f меняет значение поля is_use(true|false), в результате надо получить данные удолитворяющие заданным ограничениям.
Данных много 1кк, фильтров также до 1к, скорость получения данных не малая.
Вопрос есть ли вариант ускорить\переписать запрос?
Уточню, индекса все есть.
--Таблица с данными
CREATE UNLOGGED TABLE t (
id serial4 NOT NULL,
_value int4 NOT NULL,
param_1 int8 NOT NULL,
param_2 int8 NOT NULL,
param_3 int8 NOT NULL,
param_4 int8 NOT NULL,
CONSTRAINT t_pkey PRIMARY KEY (id)
);
--Таблица с фильтрами
CREATE UNLOGGED TABLE f (
id serial4 NOT NULL,
id_group int8 NOT NULL,
is_use bool NOT NULL,
CONSTRAINT f_pkey PRIMARY KEY (id)
);
--Запрос на получение данных
SELECT t0.*
FROM t as t0
LEFT JOIN f AS f_1 ON f_1.id = t0.param_1
LEFT JOIN f AS f_2 ON f_2.id = t0.param_2
LEFT JOIN f AS f_3 ON f_3.id = t0.param_3
LEFT JOIN f AS f_4 ON f_4.id = t0.param_4
WHERE f_1.is_use AND f_2.is_use AND f_3.is_use AND f_4.is_use