I have the following query to run, which takes 50-60ms (query plan here):
SELECT (SUM(added_vacancies) + (SELECT active_vacancies FROM report.vacancy_stats WHERE date = make_date(2021,06,01) AND company_id = 6886 LIMIT 1) - SUM(archived_vacancies)) as result
FROM report.vacancy_stats
WHERE company_id = 6886
AND vacancy_stats.date >= (make_date(2021,06,01) + integer '1')::DATE
AND vacancy_stats.date <= make_date(2021,09,25)
LIMIT 1;
Now I've put it into a function like this; and suddenly, it takes at least 300ms to run:
CREATE OR REPLACE FUNCTION report.cp_active_vacancy_count_during_period(cid integer, date_start date, date_end date)
RETURNS bigint
LANGUAGE sql
STABLE LEAKPROOF PARALLEL SAFE
AS $function$
SELECT (SUM(added_vacancies) + (SELECT active_vacancies FROM report.vacancy_stats WHERE date = date_start AND company_id = cid LIMIT 1) - SUM(archived_vacancies)) as result
FROM report.vacancy_stats
WHERE company_id = cid
AND vacancy_stats.date >= (date_start + integer '1')::DATE
AND vacancy_stats.date <= date_end
LIMIT 1;
$function$;
What could be the reason for this huge difference, and how can I solve that issue?