sql >> Database >  >> RDS >> Oracle

Het herhalen van een ResultSet met behulp van de JDBC voor Oracle kost veel tijd ongeveer 16 seconden?

Ik heb een tabel opgesteld met 4000 rijen en 10 kolommen met elk 10 tekens en een eenvoudige prestatietest gedaan met de volgende aanpak (RealTimeCounter is een klasse die de real-time meet tussen start() en stop() ):

List<String> myResult = new ArrayList<>();
ResultSet rs = s.executeQuery("SELECT * FROM Performance");

RealTimeCounter rtc = new RealTimeCounter();
rtc.start();
while(rs.next()) {
    myResult.add(rs.getString(1));
}
rtc.stop();
System.out.println(rtc);

Resultaten:

  • Standaard ophaalgrootte:uitvoeringstijd is ongeveer. 20 seconden
  • ophaalgrootte =100:uitvoeringstijd is ongeveer 2,2 sec
  • ophaalgrootte =500:uitvoeringstijd is ongeveer 450 msec
  • ophaalgrootte =2000:uitvoeringstijd is ongeveer 120 msec
  • ophaalgrootte =4000:uitvoeringstijd is ongeveer 50 msec
  • ophaalgrootte =4001:uitvoeringstijd is ongeveer 10 msec (!!)

Dus de ophaalgrootte doet hebben een aanzienlijke invloed op de uitvoeringssnelheid.

Merk op dat, aan de andere kant, de ophaalgrootte enige invloed heeft op het geheugenverbruik. Interessant genoeg, een snelle analyse met behulp van Runtime.getRuntime().freeMemory(); voor en na de bovenstaande code bleek echter dat de impact veel minder is dan ik zou verwachten. De nummers die ik heb zijn:

  • Standaard ophaalgrootte:665k
  • ophaalgrootte =100:665k
  • ophaalgrootte =500:665k
  • ophaalgrootte =2000:743k
  • ophaalgrootte =4000:821k
  • ophaalgrootte =4001:861k


  1. Vind een waarde overal in een database

  2. Hoe Sqlite-database te herstellen na een back-up van Android

  3. ORA-01036:ongeldige variabele naam/nummer bij het uitvoeren van een query via C#

  4. Op MySQL opgeslagen procedures