PostgreSQL对特定SQL与功能的性能
问题描述:
有什么区别?我知道SQL查询的执行计划与函数一样好。PostgreSQL对特定SQL与功能的性能
我foud someone讲述:
性能是一个问题,我们怀疑查询规划可能是一个 根本原因。我已将脚本从ad-hoc SQL重写为PostgreSQL函数(CREATE FUNCTION) ,我们看到服务器负载相对较差 。
但是为什么?
答
的即席查询的查询计划是不缓存,只为prepared statements。 PL/pgSQL函数在内部处理所有SQL语句,如准备好的语句。 (动态SQL的显着例外与EXECUTE
。)每个为当前会话的范围,不超出。
因此PL/pgSQL函数(不是SQL函数!)可以帮助在同一个会话中重复执行复杂的查询。就像准备好的陈述。
客户端软件默认情况下可能使用准备好的语句。或者"extended query" protocol,达到同样的效果。
相关:
即开始the thread on pgsql-general的相关答案你指的是:
还共同请参阅手册中关于PL/pgSQL的章节Plan Caching。
我被告知,查询得到他们的执行计划缓存[这里](https://stackoverflow.com/questions/46677509/postgresql-function-execution-plan-cache-principle/46678190?noredirect=1#comment80305222_46678190) –
@YevgeniyAfanasyev:这是一个误解。 ad-hoc SQL语句的查询计划未被缓存。仅用于准备好的语句。 –
没错。我假设你正在使用准备好的语句,因为如果你甚至想*关于计划如何缓存在函数等中的细节,那么你已经做到了这一点,作为降低计划成本的第一步。另外,如果被调用的函数是可嵌入的SQL函数,则可以间接调用plpgsql函数来缓存该函数。 –