我有一个带有很长的select部分的查询,其中有许多cases语句,为了清楚起见,我试图将它们放在函数中,但查询开始运行的时间比以前更长。
因此,为了进行测试,我创建了一个简单的表
CREATE TABLE t1 AS
select random()::numeric from generate_series(1, 5000000, 1)还有一个非常简单的函数
create funtion f1 (i NUMERIC)
returns NUMERIC
LANGUAGE plpgsql
AS
$body$
begin
return i+1
end
$body$并运行两个查询:
1: SELECT random, random+1 from T1
2: SELECT random, f1(random) from T1我不知道为什么第一个比第二个快两倍,所以请帮帮忙。对不起,我的英语:(
发布于 2021-10-27 14:23:11
这是因为必须为每一行调用函数f1,并且调用PL/pgSQL函数的开销非常大。
如果您将其定义为SQL函数,则它可以内联,这样会更便宜:
FREATE FUNCTION f1(i NUMERIC) RETURNS numeric
LANGUAGE sql AS
'SELECT i + 1';https://stackoverflow.com/questions/69739614
复制相似问题