0

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

4

1 回答 1

3

在 PostgreSQL 上,准备好的语句仅在会话结束前有效,并且不会保存在内存中并在许多会话之间共享,请参阅文档: http://www.postgresql.org/docs/9.2/static/sql-prepare。 html

准备好的语句仅在当前数据库会话期间持续。当会话结束时,准备好的语句被遗忘,因此必须重新创建它才能再次使用。这也意味着单个准备好的语句不能被多个同时的数据库客户端使用;但是,每个客户都可以创建自己的准备好的语句来使用。



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

如果一条准备好的语句被执行了足够多的时间,服务器最终可能会决定保存并重用一个通用计划,而不是每次都重新计划。如果准备好的语句没有参数,这将立即发生;否则,只有在通用计划似乎并不比依赖特定参数值的计划贵很多时才会发生这种情况。通常,仅当估计查询的性能对提供的特定参数值相当不敏感时,才会选择通用计划。

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

于 2013-08-09T22:52:57.753 回答