Я хочу оптимизировать производительность этого SQL-запроса. Если я заполню эту хэш-таблицу одним миллионом ключей, запрос займет около минуты. Как я могу оптимизировать этот Java-метод для более быстрого выполнения?Как оптимизировать этот SQL-запрос
private HashMap<String, Boolean> selectedIds = new HashMap<>();
public void deleteSelectedIDs() throws SQLException {
if (ds == null) {
throw new SQLException();
}
Connection conn = ds.getConnection();
if (conn == null) {
throw new SQLException();
}
PreparedStatement ps = null;
ResultSet resultSet = null;
try {
conn.setAutoCommit(false);
boolean committed = false;
try {
String sqlDeleteQuery = "DELETE FROM ACTIVESESSIONSLOG WHERE ASESSIONID = ?";
Set<String> keySet = selectedIds.keySet();
String[] keys = new String[]{};
keys = selectedIds.keySet().toArray(keys);
ps = conn.prepareStatement(sqlDeleteQuery);
for (int i = 0; i < keys.length; i++) {
if (selectedIds.get(keys[i]).booleanValue()) {
ps.setString(1, keys[i]);
ps.executeUpdate();
ps.clearParameters();
selectedIds.put(keys[i], false); //get(keys[i]) = false;
}
}
conn.commit();
committed = true;
//selectedIds.clear();
} finally {
if (!committed) {
conn.rollback();
}
}
} finally {
ps.close();
conn.close();
}
}
вы хотите оптимизировать оператор SQL или программу Java ли? Если это SQL-запрос, откуда вы знаете, что это медленная часть? У вас было время? Если да, то каков план выполнения? –
Я хочу оптимизировать все. – user1285928
Вам нужно получить идентификаторы на Java? Вы можете вычислить набор идентификаторов в SQL и выполнить полную операцию там? И миллион SQL-поездок за минуту очень хорош! в противном случае вы могли бы попытаться выполнить докетирование идентификаторов в 50 слов на SQL-оператор, используя 'WHERE ASESSIONID IN (?,?, ..' и т. д. – Rup