Jak przyspieszyć odczyt danych z BD

0

Witam,
w swoim mechanizmie próbuję pobrać dane z bazy (prosty select). Wszystko działa poprawnie tylko chodzi o czas...
Aplikacja odczytuje dane zdecydowanie dłużej niż wykonanie tego samego zapytania w IBExpert.
IBExpert Execute time = 47ms, w NetBeans ok 4-5 s.
Problem dość istotny, gdyż zapytanie wykonuję na kilkunastu bazach co w sumie daje spore różnice w czasie...

 
try {
  System.out.println("Rozpoczynam odczyt:" + sdf.format(new Date()));            
  ResultSet rs = conn.getStatement().executeQuery(QUERY);        
} catch (SQLException ex) {            
  ex.printStackTrace();        
}        
System.out.println("Kończę odczyt:" + sdf.format(new Date()));
0

prepared statement :)

0

Zastosowanie PreparedStatement-a przyspieszyło wszystko o całą sekundę, to i tak za mało

try {
  System.out.println("Rozpoczynam odczyt:" + sdf.format(new Date()));            
  PreparedStatement prstmt = conn.getPreparedStatement(QUERY);            
  ResultSet rs = prstmt.executeQuery();        
} catch (SQLException ex) 
{
 ex.printStackTrace();        
}

Rozpoczynam odczyt16458
Kończę odczyt16391
BUILD SUCCESSFUL (total time: 3 seconds)

0

No dobra, ale w takim razie co to za query? ;] Bo ja obstawiam ze po prostu musisz zmodyfikować domyślne parametry swojego connection, fetch size czy coś ;]

0

Czas działania fragmentu programu który mierzysz raczej bardziej dokładniej można zmierzyć różnicą System.nanoTime()
Różnica dwóch pobranych zmiennych da lepszy pogląd na to ile czasu teoretycznie dany kod się wykonuje. Jest to proponowany sposób mierzenia czasu w Reference java.
I przede wszystkim obecnie do liczonego czasu doliczasz wykonanie metody SimpleDateFormat.format() która jest bardzo kosztowna.
Dorzuć do tego że środowisko do zarządzania bazą danych jest skompilowane, a Twój kod prawdopodobnie jeszcze nie zdążył się załapać nawet na JIT.

0

Proponuję inaczej przeprowadzić ten test. Przede wszystkim napisać najprostszy test jednostkowy, który będzie wywoływał metodę z zapytaniem. W metodzie nie ma żadnego pomiaru czasu. Zdaj się na wyniki z narzędzia.
Kolejnym etapem powinno być wykonanie takiego testu np. 1000 razy w celu uzyskania jakiejś statystyki. JIT zazwyczaj potrafi zoptymalizować różne fragmenty. Warunkiem jest jednak ich częste wykorzystanie.
Na sam koniec warto podpiąć się do testu za pomocą profilera i zobaczyć co tak naprawdę zabiera najwięcej czasu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1