我正在像这样使用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秒。
我不明白为什么第二个要这么快。
我使用的是旧的JDBC驱动程序,我使用的是9i版本的驱动程序,数据库是11g。
我更新了JDBC驱动程序,现在JDBC调用的运行速度与在SQL Developer中一样快。
我有相同的问题,请尽可能使用setInt
而不是setString
。在Java开发人员中,Select在Oracle开发人员中花了0.07s,而在Java中使用准备好的语句花了0.7s vs 4s。我使用了ojdbc6 11.2.0.4。较新的驱动程序(ojdbc8 12.2或18.3)消除了差异,但在两种情况下(〜1s)的工作速度都稍慢。