postgreSQL解释解析函数
Posted
技术标签:
【中文标题】postgreSQL解释解析函数【英文标题】:postgreSQL explain analyse a function 【发布时间】:2015-05-30 11:14:09 【问题描述】:我正在尝试了解 postgresql 中的查询优化,并且我有一个包含一些查询的函数。其中一些是简单的查询,将一个值保存到一个变量中,然后下一个查询使用这个变量来查找一些东西。让我们说:
function()...
select type into t
from tableA
where code = a_c;
select num into n
from tableB
where id = t;
end function...
还有更多.. 如果我想解释分析整个函数,我执行命令 explain analyze select function();这是正确的方法还是我应该解释分析函数内的每个查询,如果是这样,用什么值?
【问题讨论】:
如果您对每个单独的查询进行“解释分析”,您将能够查看是否可以优化特定查询。不确定它在功能层面上是如何工作的,以及它是否有意义。 您可以将函数体放入PREPARE thing (arg1, arg2, ...) AS ... original body ...;
并使用explain analyze execute thing (args);
调用它
@wildplasser 体内的声明语句有错误,如果我不声明它们,我会收到此错误:无法准备实用程序语句
注意:问题中没有“声明声明”。 (并且 SQL 中没有 declare 语句)
【参考方案1】:
考虑使用auto_explain 模块:
auto_explain 模块提供了一种记录执行计划的方法 自动运行慢语句,而无需运行 EXPLAIN 手。这对于跟踪未优化的情况特别有用 大型应用程序中的查询。
开启auto_explain.log_nested_statements
:
auto_explain.log_nested_statements(布尔值)
auto_explain.log_nested_statements 导致嵌套语句 (在函数内执行的语句)考虑进行日志记录。 关闭时,仅记录***查询计划。这个参数 默认关闭。只有超级用户才能更改此设置。
【讨论】:
我尝试这样做,但我得到的输出是函数返回的内容。我使用的代码是: LOAD 'auto_explain';设置 auto_explain.log_min_duration = 0; SET auto_explain.log_analyze = true; SET auto_explain.log_nested_statements = on;选择 find_4(); 这个模块完成explain
的结果进入服务器的日志,它不会改变你得到的输出。以上是关于postgreSQL解释解析函数的主要内容,如果未能解决你的问题,请参考以下文章