period (year, qarter) include (period_id)
может поможет?
ни чего это не поменяло , ни в итоговом плане ни в скорости выполнения
хорошо из пушки по воробьям попробуем: сделайте immutable функцию которая возвращает period id create or replace function get_period_id(p_qarter int, p_year int) returns int as $$ select period_id from period where year = p_year and qarter = p_qarter; $$ language sql IMMUTABLE; SELECT count(*) FROM subject_position_info spi where spi.period_id = get_period_id(p.qarter, p.year)
мне не нужен returns int, одно значение это частный случай , по факту нужен набор значений (предполагается выбирать несколько периодов иногда)
выполнилось очень быстро, и выбрала только нужные партиции
я извиняюсь за глупый вопрос , а как мне вернуть в функции набор значений что бы потом сделать where spi.period_id IN (get_period_id(p.qarter, p.year))
я сам так не делал но попробовать можно: функция возвращает тип int[] а в запросе написать period_id = any(функция(год, квартал))
в общем так конкретно не получилось, но вернув table , получилось это заиспользовать только как (SELECTфункция ) И мы опять получаем сканирование всех партиций
select unnest можно использовать, и по нему пробегаться
а если делать просто AS (функция ) , то выдаёт это ОШИБКА: функции, возвращающие множества, нельзя применять в конструкции WHERE
Обсуждают сегодня