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