Java preparestatement慢于sql开发人员

问题描述 投票:4回答:2

我正在像这样使用Java和JDBC执行对Oracle数据库的调用:

PreparedStatement prep=c.prepareStatement(
    "SELECT a.user FROM  data a where a.start_time >=? " +
    "and a.end_time <=? and a.operation='UPDATE USER'");

prep.setString(1, 02-MAR-15);
prep.setString(2, 03-MAR-15);
ResultSet rs=prep.executeQuery();

此查询在返回560个值中花费了超过44秒的时间。

这里是在SQL Developer中运行的同一查询:

SELECT a.user FROM  data a where a.start_time >='02-MAR-15' 
and a.end_time <='03-MAR-15' and a.operation='UPDATE USER';

此时间少于4秒。

我不明白为什么第二个要这么快。

java oracle jdbc oracle-sqldeveloper
2个回答
2
投票

我使用的是旧的JDBC驱动程序,我使用的是9i版本的驱动程序,数据库是11g。

我更新了JDBC驱动程序,现在JDBC调用的运行速度与在SQL Developer中一样快。


0
投票

我有相同的问题,请尽可能使用setInt而不是setString。在Java开发人员中,Select在Oracle开发人员中花了0.07s,而在Java中使用准备好的语句花了0.7s vs 4s。我使用了ojdbc6 11.2.0.4。较新的驱动程序(ojdbc8 12.2或18.3)消除了差异,但在两种情况下(〜1s)的工作速度都稍慢。

© www.soinside.com 2019 - 2024. All rights reserved.