有什么不同吗?我知道 SQL 查询的执行计划与函数一样被缓存。
我发现有人告诉:
性能是一个问题,我们怀疑查询计划可能是一个问题 根本原因。我已经将脚本从临时 SQL 重写为 Postgres 函数(CREATE FUNCTION),我们看到服务器负载下降 相当多。
但是为什么?
ad-hoc 查询的查询计划not 缓存,仅用于prepared statements。 PL/pgSQL 函数在内部处理所有 SQL 语句,就像准备好的语句一样。 (带有
EXECUTE
的动态SQL除外。)每个为当前会话的范围,不超出。
所以 PL/pgSQL 函数(不是 SQL 函数!)可以帮助在同一个会话中重复执行复杂的查询。就像准备好的陈述一样。
客户端软件可能默认使用准备好的语句。或“扩展查询”协议,效果相同。
相关:
开始的相关答案pgsql-general上的线程你指的是:
还要考虑手册中的Plan Caching for PL/pgSQL 一章。