我正在使用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秒钟。
我不明白为什么第二个会这么快。
答案 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)的工作速度都稍慢。