PostgreSQL ad-hoc SQL 与函数的性能

PostgreSQL performance of ad-hoc SQL vs functions

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

我发现 someone 告诉:

Performance is an issue, and we suspect query planning might be an underlying cause. I've rewritten the scripts from ad-hoc SQL to a Postgres functions (CREATE FUNCTION) and we saw server load go down quite a bit.

但是为什么呢?

临时查询的查询计划缓存,仅用于prepared statements。 PL/pgSQL 函数在内部处理所有 SQL 语句,就像准备好的语句一样。 (动态 SQL 和 EXECUTE 除外。)每个为当前会话的范围,不超出。

因此 PL/pgSQL 函数(不是 SQL 函数!)有助于在同一会话中重复执行复杂的查询。就像准备好的语句。

客户端软件可能默认使用准备好的语句。或者"extended query" protocol,效果一样。

相关:

  • No execution plan caching for dynamic SQL in PostgreSQL 9.4?

您所指the thread on pgsql-general开始的相关回答:

还要考虑手册中 PL/pgSQL 的章节 Plan Caching