ResultSet (rs.next() ) trop trop lent
Bonjour,
J'ai une table qui contient 3 colonnes avec 15 000 enregistrements. Il existe un index sur l'une de ses colonnes (n° de séquence)
Je dois faire un SELECT * FROM MATABLE WHERE TOTO=? (? = 0 ou 1).
Lorsque je parcours rs.next, que je récupère les 3 valeurs pour les mettre dans un bean puis l'ajouter dans une arraylist, cela me prend 580 sec soit 10min pour 15 000 enregistrements !!
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
Collection results = new ArrayList(8000);
Connection connection = null;
PreparedStatement statement = null;
ResultSet rs = null;
try {
// Préparation de la requete
connection = ConnectionUtil.getConnection();
statement = connection.prepareStatement(REQUETE_SELECT, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
if (manu)
statement.setString(1, "1");
else
statement.setString(1, "0");
rs = statement.executeQuery();
long avant = System.currentTimeMillis();
logger.info("Avant:" + avant);
//[GEI] Optimisation test
//rs.setFetchSize(1000);
//rs.last();
//rs.beforeFirst();
// [/GEI] Fin de l'optimisation test
// Boucle sur les resultats
while (rs.next()) {
TempSprintDTO dto = new TempSprintDTO();
dto.setId(rs.getInt(1));
dto.setLigne(rs.getString(2));
dto.setManu(manu);
results.add(dto);
}
long apres = System.currentTimeMillis();
logger.info("Apres:" + apres);
logger.info("Difference:" + (apres - avant));
}
catch (SQLException e) {
throw e;
}
finally {
if (rs != null)
rs.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
}
return results; |
J'ai pensé au fetchSize qui est de "10" je crois pas défaut en le forcant à 1000 mais rien n'y fait.
J'utilise le serveur weblogic8 et comme driver odbc le driver weblogic oracle (en 2 phases commit)
Vous avez des idées ?