有什么区别吗?我知道SQL查询的执行计划缓存与函数一样好。
我foud someone告诉:
性能是一个问题,我们怀疑查询计划可能是一个问题 根本原因。我已经将脚本从ad-hoc SQL重写为 Postgres函数(CREATE FUNCTION),我们看到服务器负载下降 相当多。
但为什么?
答案 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。