Java preparedstatement比sql developer慢

时间:2015-03-05 20:01:59

标签: java oracle jdbc oracle-sqldeveloper

我正在使用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秒钟。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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