我在Java循环中执行一个简单的“select”查询,如下所示。列表的大小可以增长到10000+。我怎样才能提高查询速度?任何示例或建议表示赞赏。谢谢。优化在大循环中执行“选择”查询的速度
请注意,我需要检索该表的每一列中的所有数据,所以这就是使用星号(*)的原因。
List<String> valueList = ....
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection(dbURL, dbUsername, dbPassword);
for (int m = 0; m < valueList.size() ; m++) {
String sql = "SELECT * FROM WORKSHEET WHERE " + sheetId + " = '" +
valueList.get(m) + "'";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
// retreive data....
}
}
编辑:最后,有几种方法可以加快查询速度。我使用第二种方法,因为它将来会阻止ORA-04031错误。
- 使用带'IN'子句的参数化'SELECT'查询。
- 创建一个嵌套表并将来自JDBC的项目数组/列表转换为创建的嵌套表。
- 创建一个临时表并插入项目列表。然后执行JOIN到主表(1查询)并获得结果。
[SQL注入Hooooorrrrraaay!](http://bobby-tables.com/)*旁注:*使用参数化查询也会给你更好的性能。 – Bobby
您已经给出了*的原因 - 您没有使用参数化查询的任何原因? –
通过在每个查询('WHERE pair1或pair2或pair3 etc ...')中检索多个sheetID/m对来减少执行的查询的总数将会减少一些开销。 –