PostgreSQL对ad-hoc SQL vs函数的性能

时间:2017-10-11 01:58:02

标签: postgresql prepared-statement plpgsql sql-execution-plan

有什么区别吗?我知道SQL查询的执行计划缓存与函数一样好。

我foud someone告诉:

  

性能是一个问题,我们怀疑查询计划可能是一个问题   根本原因。我已经将脚本从ad-hoc SQL重写为   Postgres函数(CREATE FUNCTION),我们看到服务器负载下降   相当多。

但为什么?

1 个答案:

答案 0 :(得分:1)

ad-hoc查询的查询计划缓存,仅适用于prepared statements。 PL / pgSQL函数在内部处理所有SQL语句,如预处理语句。 (除了带有EXECUTE的动态SQL的明显例外。)每个都是当前会话的范围,而不是超出。

因此PL / pgSQL函数(不是SQL函数!)可以帮助在同一个会话中重复执行复杂查询。就像准备好的陈述一样。

默认情况下,客户端软件可能正在使用预准备语句。或"extended query" protocol,效果相同。

相关:

您所指的the thread on pgsql-general所涉及的相关答案:

另请参阅手册中的PL / pgSQL章节Plan Caching