Oracle
 sql >> база данни >  >> RDS >> Oracle

Итерацията на ResultSet с помощта на JDBC за Oracle отнема много време около 16 секунди?

Създадох таблица с 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да копирам псевдозаписи :OLD и :NEW в/в съхранена процедура на Oracle?

  2. Как да се върнете назад, когато възникне грешка при изпълнение на командата за зареждане на sql?

  3. Oracle вмъкнете в table2, след което изтрийте от table1, изключение, ако не успеете

  4. ORACLE - ORA-01843:не е валиден месец

  5. Как да създадете колона, която не е нула в изглед