Skonfigurowałem tabelę z 4000 wierszami i 10 kolumnami po 10 znaków każda i wykonałem prosty test wydajności przy użyciu następującego podejścia (RealTimeCounter
to klasa, która mierzy czas rzeczywisty między start()
i 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);
Wyniki:
- Domyślny rozmiar pobierania:czas wykonania wynosi ok. 20 sekund
- rozmiar pobierania =100:czas wykonania wynosi około 2,2 s
- rozmiar pobierania =500:czas wykonania wynosi około 450 ms
- rozmiar pobierania =2000:czas wykonania wynosi około 120 ms
- rozmiar pobierania =4000:czas wykonania wynosi około 50 ms
- rozmiar pobierania =4001:czas wykonania wynosi około 10 ms (!!)
Tak więc rozmiar pobierania tak mają znaczący wpływ na szybkość wykonywania.
Zauważ, że z drugiej strony rozmiar pobierania ma pewien wpływ na zużycie pamięci. Co ciekawe, szybka analiza przy użyciu Runtime.getRuntime().freeMemory();
przed i po powyższym kodzie pokazał, że wpływ jest znacznie mniejszy, niż bym się spodziewał. Otrzymałem następujące liczby:
- Domyślny rozmiar pobierania:665 tys.
- rozmiar pobierania =100:665 tys.
- rozmiar pobierania =500:665 tys.
- rozmiar pobierania =2000:743k
- pobierz rozmiar =4000:821k
- rozmiar pobierania =4001:861k