我的程序在 Oracle 查询性能方面存在问题,我相信 SQL 的性能很好,因为它在 SQLPlus 中返回很快。
但是当我的程序运行了很长时间,比如 1 周时,SQL 查询(使用 JDBC)变得更慢(在我的日志中,查询时间比我最初启动程序时要长得多)。当我重新启动程序时,查询性能恢复正常。
我认为我使用preparedStatement的方式可能有问题,因为我使用的SQL不使用占位符“?” 一点也不。只是一个复杂的选择查询。
查询过程由 util 类完成。这是构建查询的相关代码:
public List<String[]> query(String sql, String[] args) {
Connection conn = null;
conn = openConnection();
conn.setAutocommit(true);
....
PreparedStatement preStatm = null;
ResultSet rs = null;
....//set preparedstatment arg code
rs = preStatm.executeQuery();
....
finally{
//close rs
//close prestatm
//close connection
}
}
就我而言,args 始终为空,因此它只是将查询 sql 传递给此查询方法。在程序长时间运行后,这种方式可能会减慢数据库查询的速度吗?或者我应该改用语句,或者只用“?”传递参数 在 SQL 中?如何找出问题的根本原因?谢谢。