栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

扩展复合结果时,避免在同一函数上多次调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

扩展复合结果时,避免在同一函数上多次调用

甚至不需要CTE。一个 普通的子查询 也可以完成这项工作(已在9.3版中进行了测试):

SELECt i, (f).*          -- decompose hereFROM  (   SELECt i, (slow_func(i)) AS f    -- do not decompose here   FROM   generate_series(1, 3) i   ) sub;

确保不要在子查询中分解函数的复合结果。将其保留给 外部查询
当然需要一个众所周知的类型。无法使用匿名记录。

或者说,什么@Richard写道,一个

LATERALJOIN
作品了。语法可以更简单:

SELECt * FROM generate_series(1, 3) i, slow_func(i) f
  • LATERAL
    在Postgres 9.3或更高版本中隐式应用。
  • 函数可以在
    FROM
    子句中独立存在,而不必包装在其他子选择中。试想一下在其位置上有一张桌子。

SQL Fiddle 具有

EXPLAINVERBOSE
所有变体的输出。如果发生该功能,您可以 看到 对该功能的多次评估。

COST
环境

通常,(对于此特定查询无关紧要),请确保对您的函数应用高成本设置,因此计划者会知道避免进行更多必要的评估。喜欢:

CREATE OR REPLACE FUNCTION slow_function(int)  RETURNS result_t AS$func$    -- expensive body$func$ LANGUAGE sql IMMUTABLE **COST 100000** ;

每个文档:

较大的值会使计划人员尝试避免不必要地评估函数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号