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