即席 SQL 与函数的 PostgreSQL 性能

问题描述 投票:0回答:1

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

我发现有人告诉:

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

但是为什么?

postgresql prepared-statement plpgsql sql-execution-plan
1个回答
3
投票

ad-hoc 查询的查询计划not 缓存,仅用于prepared statements。 PL/pgSQL 函数在内部处理所有 SQL 语句,就像准备好的语句一样。 (带有

EXECUTE
的动态SQL除外。)每个为当前会话的范围,不超出。

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

客户端软件可能默认使用准备好的语句。或“扩展查询”协议,效果相同。

相关:

开始的相关答案pgsql-general上的线程你指的是:

还要考虑手册中的Plan Caching for PL/pgSQL 一章。

© www.soinside.com 2019 - 2024. All rights reserved.