Java 我应该在重复查询中使用preparedStatement吗?在重复查询中,where子句谓词经常更改,从而导致所选计划的更改
我有一个Java应用程序,它使用JDBC在PostgreSQL 9.3服务器上执行查询。在我的java应用程序中,我必须使用“where”子句谓词中的不同参数多次(数千次)执行相同的查询。到目前为止,我一直在使用语句类。我最近在某个地方读到关于PreparedStatement类的文章,我想我应该用它来加速处理。但我怀疑这一点。由于每次执行我的查询时Where子句谓词中的值不同,因此选择性将发生变化,因此db服务器选择的计划将发生变化。在这种情况下,使用PreparedStatement会加快处理速度吗是在创建Preparedstatement时选择计划,还是仅在Preparedstatement对象上调用execute时选择计划?若在preparedstatement本身创建时选择了plan,那个么由于优化器根据使用实际谓词值计算的选择性来选择计划,那个么它是如何完成的呢 我的查询是一个涉及许多表的复杂查询。模板就像, 从predicate1和predicate2以及priceJava 我应该在重复查询中使用preparedStatement吗?在重复查询中,where子句谓词经常更改,从而导致所选计划的更改,java,eclipse,postgresql,jdbc,Java,Eclipse,Postgresql,Jdbc,我有一个Java应用程序,它使用JDBC在PostgreSQL 9.3服务器上执行查询。在我的java应用程序中,我必须使用“where”子句谓词中的不同参数多次(数千次)执行相同的查询。到目前为止,我一直在使用语句类。我最近在某个地方读到关于PreparedStatement类的文章,我想我应该用它来加速处理。但我怀疑这一点。由于每次执行我的查询时Where子句谓词中的值不同,因此选择性将发生变化,因此db服务器选择的计划将发生变化。在这种情况下,使用PreparedStatement会加快处
moe是对的:准备一个查询只会消除一次又一次重新分析它的开销。仅当您将使用其参数执行准备好的查询时,才会执行规划。在9.3中,它使用启发式。它的作用类似于在执行准备好的语句的前5次使用特定的绑定值规划查询。如果这些计划中没有一个比通用计划好得多,那么它将停止单独的计划,并从那时起使用通用计划 但是,代码告诉驱动程序使用预先准备好的语句,这并不意味着驱动程序实际上正在这样做。很多司机做奇怪的事情
真正的答案是测试,测试,测试。好的。但我想知道解析和重写能节省多少时间,因为我认为计划是一个耗时的步骤。如果每次执行PreparedStatement时都这样做,那么您认为在我的场景中切换到PreparedStatement有用吗。。。解决方案我认为:)