查询执行计划是否存储在postgresql中的任何位置?

时间:2018-01-17 12:42:46

标签: postgresql explain

我试图弄清楚PostgreSQL查询执行计划是否存储在某个地方(可能与pg_stat_statementspg_prepared_statements互补),其可用时间长于会话持续时间。我知道PREPARE确实在pg_prepared_statements中缓存了一个sql语句,尽管据我所知,该计划本身似乎在任何视图中都不可用。

我不确定是否有文档解释PostgreSQL查询计划的生命周期,但从EXPLAIN文档中的内容来看,PostgreSQL根本不会缓存查询计划。这准确吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

PostgreSQL没有执行计划的共享存储,因此无法跨数据库会话重用它们。

有两种方法可以在会话中缓存执行计划:

  1. 将预准备语句与SQL语句PREPAREEXECUTE一起使用。该计划将在准备好的声明的生命周期内进行缓存,通常直到您的会话结束。

  2. 使用PL / pgSQL函数。在此类函数中,所有静态SQL语句(即EXECUTE一起运行的语句)的计划将在会话生命周期内缓存。

  3. 除此之外,执行计划不会缓存在PostgreSQL中。