Jeg har opsat en tabel med 4000 rækker og 10 kolonner med hver 10 tegn og lavet en simpel præstationstest ved at bruge følgende fremgangsmåde (RealTimeCounter
er en klasse som måler realtiden mellem start()
og 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);
Resultater:
- Standard hentestørrelse:Eksekveringstiden er ca. 20 sek.
- hentningsstørrelse =100:Udførelsestiden er ca. 2,2 sek.
- hentningsstørrelse =500:udførelsestiden er ca. 450 msek
- hentningsstørrelse =2000:udførelsestiden er ca. 120 msek
- hentningsstørrelse =4000:Udførelsestiden er ca. 50 msek
- hentningsstørrelse =4001:udførelsestiden er ca. 10 msek (!!)
Så det gør det hentestørrelsen have en væsentlig indflydelse på udførelseshastigheden.
Bemærk på den anden side, at hentestørrelsen har en vis indflydelse på hukommelsesforbruget. Interessant nok, en hurtig analyse ved hjælp af Runtime.getRuntime().freeMemory();
før og efter ovenstående kode viste, at virkningen dog er meget mindre, end jeg ville forvente. De tal, jeg fik, er:
- Standard hentestørrelse:665k
- hentningsstørrelse =100:665k
- hentningsstørrelse =500:665k
- hentningsstørrelse =2000:743k
- hentningsstørrelse =4000:821k
- hentningsstørrelse =4001:861k