在查看 and 的几个示例时pl/python
,pl/pgsql
我看到了很多(但不是全部)使用volatile cost
.
IE:
CREATE OR REPLACE FUNCTION my_function()
RETURNS setof record AS
$BODY$
-- code
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
搜索有关我的更多信息时,volatile cost
我发现(乍一看)大约至少 90% 的 Web 示例都在使用. (因为它是 1000)。volatile cost 100
volatile cost 1
rows
据我了解,此指示有助于查询计划优化器决定如何在短路布尔操作中设置优先级。
如果我开始估计cost
或rows
为我的每个存储过程提供估计,是不是过早的优化?我应该只在我想优化某些查询时才这样做吗?选择成本的好价值是一门艺术吗?
我知道 command explain
,我还没有学过。这个命令对估计有帮助cost
吗?
VOLATILE
完全独立于COST
。第一个定义函数波动性并且
VOLATILE
是默认值,因此可以省略。替代方案是STABLE
和IMMUTABLE
。后者仅在与
COST
参数组合时有效,例如COST 500
. 默认是COST 100
可以省略的。它声明结果的每行成本,查询计划程序使用它来查找最便宜的计划。如果您不知道自己在做什么,只需将其保留为默认值即可。阅读非常精美的手册,从章节开始
CREATE FUNCTION
。