我有一个函数返回一个整数数组。如果我打电话:为什么快速功能在ANY内部变慢?
select getmun_gaz(12554)
它返回一个 '整数[]' 在33毫秒:
{1547,1564}
完全相同的结果我得到:
select array[1547,1564]
同类型(整数[]),相同的值({1547,1564}),只有很小的时间差。那么,为什么这个工作立即:
但这需要超过2分钟?
select *
from loc
where id = any(getmun_gaz(12554))
如果需要,我会发布函数的内容和表的结构。数据来自哪里的表格确实很大,但是一开始这并没有什么不同,所以为什么最终呢?
功能:
CREATE OR REPLACE FUNCTION getmun_gaz(gaz_id integer)
RETURNS integer[] AS
$BODY$
with recursive locpais as (
select l.id, l.nome, l.tipo tid, lt.tipo, lp.pai, 1 as profund
from loc l
left join locpai lp on lp.loc = l.id
left join loctipo lt on lt.id = l.tipo
where l.id = gaz_id
union
select l.id, l.nome, l.tipo tid, lt.tipo, lp.pai, profund+1
from loc l
left join locpai lp on lp.loc = l.id
left join loctipo lt on lt.id = l.tipo
join locpais p on (l.id = p.pai)
)
select array_agg(id) from locpais
where tid = 8
$BODY$
LANGUAGE sql VOLATILE
COST 100;
我会在以后添加表结构,如果需要的话。现在得走。
getnum_gaz()是什么?是的,你应该发布该功能,因为当然这里没有人知道它的内容。 – Pointy
尝试声明你的函数为'STABLE'或'IMMUTABLE' [请阅读原因](http://www.postgresql.org/docs/9.5/static/sql-createfunction.html) – Abelisto
看起来像你解决了它,@ Abelisto。发布这个作为答案,如果它的作品绿色复选标记是你的。 – Rodrigo