Създадох таблица с 4000 реда и 10 колони с по 10 знака всяка и направих прост тест за производителност, използвайки следния подход (RealTimeCounter
е клас, който измерва реалното време между start()
и 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);
Резултати:
- Размер на извличане по подразбиране:времето за изпълнение е приблизително. 20 сек
- размер на извличане =100:времето за изпълнение е приблизително 2,2 сек
- размер на извличане =500:времето за изпълнение е приблизително 450 мс
- размер на извличане =2000:времето за изпълнение е приблизително 120 мс
- размер на извличане =4000:времето за изпълнение е приблизително 50 мс
- размер на извличане =4001:времето за изпълнение е приблизително 10 мс (!!)
Така че размерът на извличаневи оказват значително влияние върху скоростта на изпълнение.
Имайте предвид, че от друга страна, размерът на извличане оказва известно влияние върху консумацията на памет. Интересното е, че бърз анализ с помощта на Runtime.getRuntime().freeMemory();
преди и след горния код показа, че въздействието е много по-малко, отколкото бих очаквал. Цифрите, които получих са:
- Размер на извличане по подразбиране:665k
- размер на извличане =100:665k
- размер на извличане =500:665 k
- размер на извличане =2000:743k
- размер на извличане =4000:821 k
- размер на извличане =4001:861 k