【发布时间】:2015-11-07 08:31:23
【问题描述】:
在函数定义 I can specify estimations for planner 中,例如 ROWS 1000 和 COST 100。但是该函数可以根据条件返回一行或一百万行。是否有任何“有条件的方式”来定义估计?当然,这并不是每次都改变函数定义。
【问题讨论】:
标签: postgresql user-defined-functions sql-execution-plan
在函数定义 I can specify estimations for planner 中,例如 ROWS 1000 和 COST 100。但是该函数可以根据条件返回一行或一百万行。是否有任何“有条件的方式”来定义估计?当然,这并不是每次都改变函数定义。
【问题讨论】:
标签: postgresql user-defined-functions sql-execution-plan
不,没有条件方法。
我能想到的唯一例外是可以在外部查询中“内联”的非常简单的 SQL 函数(对于 plpgsql 函数不可能)。然后 Postgres 应用默认估计值,而不是为黑盒声明的估计值,否则这些黑盒的功能将应用于查询计划器。 (内联基本上丢弃了函数包装器,并将正文中的 SQL 合并到外部查询中。)
COST 和 ROWS 的设置无关紧要,只要函数没有嵌套到(复杂)更大的查询中,在这种情况下,您应该避免用户定义的 set-returning不能内联的函数。你可以做到这一点,但它可能会导致次优查询计划 - 其中COST 和ROWS 设置也不是最重要的问题。查询计划器无法优化整个查询的计划,但必须分别针对函数和查询的其余部分进行优化。
相关:
【讨论】: