Optimiser ses requêtes JDBC en java

Lorsque vous utilisez un driver JDBC Java, le ResultSet vous permettant de récupérer chaque ligne retournée par votre requête peut être lent. Le ResultSet pour certain driver ne retourne qu’une ligne à la fois, si la connexion entre votre serveur web et votre base de données est lente, vos requêtes vont s’en trouver ralentit. En effet, chaque ligne retourné par votre SELECT et récupéré par le ResultSet correspond à un appel à votre base de donnée.

Pour résoudre d’éventuels problèmes de lenteur, il est possible de définir le nombre de ligne retournée. Par défaut, votre Statement ou PreparedStatement ne retourne qu’une ligne en la fois.Lors du parcours du ResultSet, cela peut s’avérer catastrophiquepour vos performances.

Utilisez la méthode setFetchSize sur votre object Statement afin de définir le nombre de ligne à ramener à chaque appel à la base de donné.

Connection cnx = ConnexionOracle.getConnexion(true);
Statement stmt = cnx.createStatement();
stmt.setFetchSize(500);

Ce code ramène les lignes demandées par paquet de 500 lignes (Ne pas confondre avec l’ordre LIMIT qui n’a rien à voir)

Attention, ne devenez pas accro à cette méthode. Elle peut s’avérer très vite gourmande en ressource. Cette méthode s’applique à un Statement ou PreparedStatement. Par définition,elle peut donc être défint pour chaque requête. Adapter donc le fetchSize en fonction du nombre de lignes retournées par vos requêtes. Il serait idiot de définir un FetchSize de 500 pour une requête qui ne ramène qu’un count d’une table( et par conséquent une seule ligne).

De plus, il est à noté que certains drivers ignorent complétement cette instruction et utilise leurs propres systèmes d’optimisation.