我试图弄清楚PostgreSQL查询执行计划是否存储在某个地方(可能与pg_stat_statements
和pg_prepared_statements
互补),其可用时间长于会话持续时间。我知道PREPARE
确实在pg_prepared_statements
中缓存了一个sql语句,尽管据我所知,该计划本身似乎在任何视图中都不可用。
我不确定是否有文档解释PostgreSQL查询计划的生命周期,但从EXPLAIN文档中的内容来看,PostgreSQL根本不会缓存查询计划。这准确吗?
谢谢!
答案 0 :(得分:0)
PostgreSQL没有执行计划的共享存储,因此无法跨数据库会话重用它们。
有两种方法可以在会话中缓存执行计划:
将预准备语句与SQL语句PREPARE
和EXECUTE
一起使用。该计划将在准备好的声明的生命周期内进行缓存,通常直到您的会话结束。
使用PL / pgSQL函数。在此类函数中,所有静态SQL语句(即不与EXECUTE
一起运行的语句)的计划将在会话生命周期内缓存。
除此之外,执行计划不会缓存在PostgreSQL中。