2

pgjdbcprepareThreshold中的定义如下:

在切换到使用服务器端准备好的语句之前,确定所需的 PreparedStatement 执行次数。默认值为五个,这意味着在第五次执行相同的 PreparedStatement 对象时开始使用服务器端准备好的语句。有关服务器端准备语句的更多信息,请参见“服务器准备语句”部分。

我想知道这实际上给我们带来了什么好处?大多数网络服务器几个月都不会重新启动,所以所有数据库查询最终都会发送超过 5 次,所以给它一周左右的时间,所有准备好的语句都将存储在服务器上,不是吗?这仅仅是为了使桌面应用程序受益吗?还是我错过了一些东西,比如“一段时间内的 5 个阈值”?

4

1 回答 1

1

我了解您想知道为什么 JDBC 驱动程序在使用服务器端准备好的语句之前完全等待。

在不参与决策过程的情况下,我会说原因是准备语句意味着一定的开销(发送准备、绑定和执行调用)。只有当您确信该语句将被重用时,这样做才有意义。

不要忘记,准备好的语句还有其他用途,可以在多次执行中节省 Parse 步骤:这是避免 SQL 注入的王道。仅此一项就证明了准备好的语句是合理的,即使它只执行一次。

于 2019-05-22T19:20:47.257 回答