Задать вопрос
@firstmixon

Как оптимизировать запрос с фильтром?

Реализована следующая схема, упрощенно(есть массив данных с параметрами и значением(поле _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
  • Вопрос задан
  • 100 просмотров
Подписаться 2 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    QPT PostgreSQL 16. Оптимизация запросов
    1 неделя
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • Слёрм
    PostgreSQL База
    4 недели
    Далее
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Если соотношение чтение/запись велико и это реально узкое место всей системы, то, теоретически, можно сделать materialized view только с нужными данными. Но вообще слишком мало информации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы