Sql 返回类型的函数运行多次
这是我的第一个问题,如果我做错了,很抱歉 我在PostgreSQL中有一个返回类型的函数,我想显示该类型的所有字段。 起初,我正在执行以下SQL:Sql 返回类型的函数运行多次,sql,postgresql,Sql,Postgresql,这是我的第一个问题,如果我做错了,很抱歉 我在PostgreSQL中有一个返回类型的函数,我想显示该类型的所有字段。 起初,我正在执行以下SQL: SELECT (FC_FUNCTION(FIELD_A, FIELD_B, FIELD_C)).* FROM TABLE 但我注意到它跑得太慢了。检查后,它看起来像是在为该类型的每个字段再次运行该函数。将SQL更改为以下值不仅返回相同的结果,而且速度更快: SELECT (X).* FROM (SELECT FC_FUNCTION(FIELD_
SELECT (FC_FUNCTION(FIELD_A, FIELD_B, FIELD_C)).*
FROM TABLE
但我注意到它跑得太慢了。检查后,它看起来像是在为该类型的每个字段再次运行该函数。将SQL更改为以下值不仅返回相同的结果,而且速度更快:
SELECT (X).*
FROM (SELECT FC_FUNCTION(FIELD_A, FIELD_B, FIELD_C) AS X FROM TABLE) A
这是正确的做法吗?对我来说,这更像是一种变通而非解决方案。谢谢 这是:
[…]这两个查询具有相同的结果:
SELECT (myfunc(x)).* FROM some_table;
SELECT (myfunc(x)).a, (myfunc(x)).b, (myfunc(x)).c FROM some_table;
小费
PostgreSQL通过将第一种形式转换为第二种形式来处理列扩展。因此,在本例中,myfunc()
将使用任一语法在每行调用三次。如果这是一个昂贵的函数,您可能希望避免这种情况,您可以使用以下查询:
SELECT m.* FROM some_table, LATERAL myfunc(x) AS m;
将函数放置在横向FROM
项中可以防止每行调用该函数不止一次m.*
仍然扩展为m.a、m.b、m.c
,但现在这些变量只是对来自项的输出的引用。(此处,LATERAL
关键字是可选的,但我们显示它是为了澄清函数是从一些表中获取x
)
你能分享函数定义吗?还有预期的输出?我搜索了一下,没有找到这个文档,非常感谢!