定义函数的会话级别估计

Defining session level estimations for function

在函数定义 I can specify estimations for planner 中,例如 ROWS 1000COST 100。但是该函数可以 return 一行或一百万行,具体取决于条件。是否有任何 "conditional way" 来定义估计?当然,这并不是每次都改变函数定义。

没有,没有条件的方法。

我能想到的唯一例外是非常简单的 SQL 函数,它们可以在外部查询中 "inlined" (plpgsql 函数不可能)。然后 Postgres 应用默认估计而不是为黑盒声明的估计,否则黑盒将对查询计划器起作用。 (内联基本上丢弃函数包装器并将正文中的 SQL 合并到外部查询中。)

COSTROWS 的设置并不重要,只要函数没有嵌套到(复杂的)更大的查询中,在这种情况下您应该避免不能内联的用户定义的集合返回函数。您 可以 这样做,但它可能会导致次优的查询计划 - 其中 COSTROWS 设置也不是最重要的问题。查询规划器无法优化整个查询的计划,但必须针对函数和查询的其余部分分别进行优化。
相关: