首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL:为什么在SELECT中调用函数(NUMERIC -> NUMERIC)开销太大?

PostgreSQL:为什么在SELECT中调用函数(NUMERIC -> NUMERIC)开销太大?
EN

Stack Overflow用户
提问于 2021-10-27 13:29:58
回答 1查看 40关注 0票数 1

我有一个带有很长的select部分的查询,其中有许多cases语句,为了清楚起见,我试图将它们放在函数中,但查询开始运行的时间比以前更长。

因此,为了进行测试,我创建了一个简单的表

代码语言:javascript
复制
CREATE TABLE t1 AS
select random()::numeric from generate_series(1, 5000000, 1)

还有一个非常简单的函数

代码语言:javascript
复制
create funtion f1 (i NUMERIC)
returns NUMERIC
LANGUAGE plpgsql
AS
$body$
begin
return i+1
end
$body$

并运行两个查询:

代码语言:javascript
复制
1: SELECT random, random+1 from T1
2: SELECT random, f1(random) from T1

我不知道为什么第一个比第二个快两倍,所以请帮帮忙。对不起,我的英语:(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-27 14:23:11

这是因为必须为每一行调用函数f1,并且调用PL/pgSQL函数的开销非常大。

如果您将其定义为SQL函数,则它可以内联,这样会更便宜:

代码语言:javascript
复制
FREATE FUNCTION f1(i NUMERIC) RETURNS numeric
   LANGUAGE sql AS
'SELECT i + 1';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69739614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档