sql >> Databáze >  >> RDS >> Oracle

Iterace ResultSet pomocí JDBC pro Oracle zabere hodně času, asi 16s?

Nastavil jsem tabulku se 4000 řádky a 10 sloupci s 10 znaky a provedl jsem jednoduchý test výkonu pomocí následujícího přístupu (RealTimeCounter je třída, která měří reálný čas mezi start() a 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);

Výsledky:

  • Výchozí velikost načtení:doba provedení je přibl. 20 sekund
  • velikost načtení =100:doba provedení je přibližně 2,2 s
  • velikost načtení =500:doba provedení je přibližně 450 ms
  • velikost načtení =2000:doba provedení je přibližně 120 ms
  • velikost načtení =4000:doba provedení je přibližně 50 ms
  • velikost načtení =4001:doba provedení je přibližně 10 ms (!!)

Velikost načtení tedy dělá mají významný vliv na rychlost provádění.

Všimněte si, že na druhou stranu má velikost načtení určitý vliv na spotřebu paměti. Zajímavá je rychlá analýza pomocí Runtime.getRuntime().freeMemory(); před a po výše uvedeném kódu ukázal, že dopad je mnohem menší, než bych očekával. Získaná čísla jsou:

  • Výchozí velikost načtení:665 kB
  • velikost načtení =100:665 kB
  • velikost načtení =500:665 kB
  • velikost načtení =2000:743 kB
  • velikost načtení =4000:821 kB
  • velikost načtení =4001:861 kB


  1. SQL Server SP - Předat parametr pro seznam polí IN?

  2. Krok za krokem postgres_fdw

  3. Únik z jednoduché uvozovky v PHP při vkládání do MySQL

  4. Jak dekódovat hex bajtového sloupce PostgreSQL na int16/uint16 v r?