sql >> Database teknologi >  >> RDS >> Oracle

At iterere et ResultSet ved hjælp af JDBC for Oracle tager meget tid omkring 16s?

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


  1. Sådan bevarer du data i en dockeriseret postgres-database ved hjælp af volumener

  2. CAST(DATETIME AS DATE) over WHERE-sætning

  3. SQL - HVIS FINDER OPDATERING ELLERS INDSÆT I

  4. Sådan sammenlignes to tabeller i MySQL