使用JDBC API的PreparedStatement在PostgreSQL中执行查询时需要注意的事项

我会使用PostgreSQL JDBC驱动程序发送查询时发现的问题进行备忘。

预处理语句的性能趋势是否会改变?

当创建PreparedStatement对象并重复执行查询时,有时在某一点上突然出现查询性能好转的情况。

这是在PostgreSQL JDBC驱动程序规范中的说明,当以同一PreparedStatement对象重复执行查询超过一定次数时,查询将被缓存在PostgreSQL服务器端并进一步加快执行速度。

换句话说,如果使用PostgreSQL JDBC驱动程序,基于PreparedStatement的查询执行优化有两个阶段。

    1. 客户端优化

 

    客户端 + PostgreSQL服务端优化

特别的,PostgreSQL服务器端的优化对性能有很大的影响,通过优化可以跳过SQL语句的解析和执行计划的创建,因此在第二阶段时性能很容易提升。

所以,默认设置是从1级升级到2级需要五次。该阈值是可调的。

    • PostgreSQLの接続URLにてパラメータprepareThreshold = intで指定する。クエリ全体に影響。

 

    PreparedStatementオブジェクトごとにvoid setPrepareThreshold(int threshold)メソッドで指定する。

請參考以下文件以瞭解詳細內容:
https://jdbc.postgresql.org/documentation/head/server-prepare.html
https://jdbc.postgresql.org/documentation/head/connect.html

PreparedStatement是什么?

有点复杂的是,PostgreSQL服务器端的查询缓存机制也被称为”准备好的语句”。

所以,如果按照 PostgreSQL → JDBC 的顺序学习的话,

尽管正在使用JDBC API的PreparedStatement来发送查询,但未使用(PostgreSQL的)预处理语句功能(╥﹏╥)…

成为了一个像波尔那雷夫一样的状态。

我沉迷于这种方式…

PostgreSQL的准备语句功能有时也会出乎意料地表现,容易让人陷入困境,但这将在另一篇文章中详细讨论。

广告
将在 10 秒后关闭
bannerAds