在功能定义I can specify estimations for planner中,例如ROWS 1000
和COST 100
。但是该函数可以根据条件返回一行或一百万行。是否有任何“条件方式”来定义估算?当然,这并不是每次都改变功能定义。
答案 0 :(得分:1)
不,没有条件的方式。
我能想到的唯一例外是非常简单的SQL函数,可以"内联"在外部查询中(不可能用于plpgsql函数)。然后Postgres应用默认估计值,而不是为查询计划器以其他方式起作用的黑盒子声明的估计值。 (内联基本上丢弃了函数包装器,并将正文中的SQL合并到外部查询中。)
COST
和ROWS
的设置并不重要,只要该功能没有嵌入(复杂的)更大的查询中,并且您应该避免使用无法内联的用户定义的set-returns函数。您可以执行此操作,但可能会导致次优查询计划 - 其中COST
和ROWS
设置也不是最重要的问题。查询计划程序无法优化整个查询的计划,但必须分别为函数和查询的其余部分执行此操作。
相关: