Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PostgreSQL, параметры функций и анализатор

Степан Д Ученик (131), на голосовании 12 месяцев назад
Есть ф-я
CREATE OR REPLACE FUNCTION tfunc_2(p_ids int[])
RETURNS numeric
LANGUAGE plpgsql
STABLE
AS $function$
DECLARE
res numeric;
begin
select avg(length( b.booking _ref))
into res
from booking b
where (array_length2(p_ids) < 1
or
b.booking _id in (select unnest(p_ids::int[])));
return res;
END
$function$
;

почему анализатор не может использовать индекс по полю b.booking _id и можно ли как-то заставить его это делать? в oracle решается хинтом cardinality
Голосование за лучший ответ
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263840) 1 год назад
 ...
select avg(length(b.booking_ref))
into res
from booking b
where array_length(p_ids, 1) < 1
or b.booking_id = any(p_ids);
...
Похожие вопросы