我有大量代码如下:
conn.createStatement().executeQuery("SELECT a, b, c FROM foo;");
在我的postgres日志中,我看到了很多这样的行:
parse <unnamed>: SELECT a, b, c FROM foo;
bind <unnamed>: SELECT a, b, c FROM foo;
execute <unnamed>: SELECT a, b, c FROM foo;
这是在生产服务器上。
在我的测试服务器上,我看到:
execute <unnamed>: SELECT a, b, c FROM foo;
我希望在生产服务器上看到这一点。
为什么它试图为我的简单选择查询创建一个准备好的语句?
一些背景知识:
答案 0 :(得分:1)
是的,PostgreSQL JDBC驱动程序使用扩展协议(parse / bind / execute),除非您强制使用协议版本2.
通常,性能影响很小,因为协议消息往往只包含在一个网络数据包中,而且不应该是一个问题。
我会三思而后行,在强制执行协议版本2之前测试好并对性能差异进行基准测试。这个旧的协议版本不受支持并且开始闻起来很有趣。已经认真考虑删除对它的支持(有关最近的讨论,请参阅this message)。