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。
有什么区别吗?我知道 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。