请求之间是否存在准备好的陈述?

时间:2013-08-09 01:24:14

标签: php postgresql doctrine-orm rdbms

如果我想对两个不同的请求执行相同的查询,并且我使用带有Doctrine2的预准备语句...预备语句是否仅在第一次发送并由数据库存储一段时间?或者在每个脚本完成后删除它?

1 个答案:

答案 0 :(得分:2)

在PostgreSQL上,预准备语句仅在会话结束时有效,并且未保存在内存中并在多个会话之间共享,请参阅doc: http://www.postgresql.org/docs/9.2/static/sql-prepare.html

  

预准备语句仅持续当前数据库的持续时间   会话。会话结束时,忘记准备好的声明,   所以必须在重新使用之前重新创建它。这也意味着   单个预准备语句不能同时使用多个   数据库客户;但是,每个客户都可以创建自己的准备   声明使用。



但是,他们也说,PostgreSQL可能(但不需要)在内存中保存这个查询的计划,以便将来重用:

  

如果准备好的语句执行的次数足够多,服务器可以   最终决定保存并重复使用通用计划而不是   每次重新规划。如果准备好,这将立即发生   声明没有参数;否则只有通用时才会发生   计划似乎并不比依赖计划的计划贵得多   具体参数值。通常,将选择通用计划   只有当查询的性能估计相当不敏感时   到提供的具体参数值。

     

要检查PostgreSQL用于准备语句的查询计划,请使用EXPLAIN。如果正在使用通用计划,它将包含   参数符号$ n,而自定义计划将具有当前实际值   参数值代入其中。

相关问题