Wykonuję proste zapytanie "wybierz" w pętli Java, co pokazano poniżej. Rozmiar listy może wzrosnąć nawet do 10000+. Jak mogę poprawić szybkość zapytań? Doznajemy dowolnego przykładu lub rady. Dzięki.Optymalizacja prędkości podczas wykonywania kwerendy "wybierz" w dużej pętli
Należy zauważyć, że muszę pobrać wszystkie dane w każdej kolumnie tej tabeli, dlatego używa się gwiazdki (*).
List<String> valueList = ....
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection(dbURL, dbUsername, dbPassword);
for (int m = 0; m < valueList.size() ; m++) {
String sql = "SELECT * FROM WORKSHEET WHERE " + sheetId + " = '" +
valueList.get(m) + "'";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
// retreive data....
}
}
Edycja: Na końcu jest kilka sposobów na przyspieszenie tej kwerendy. Używam drugiej metody, ponieważ w przyszłości zapobiegnie to błędowi ORA-04031.
- Użyj sparametryzowanej kwerendy "WYBIERZ" z klauzulą "IN".
- Utwórz tabelę zagnieżdżoną i odtwórz tablicę/listę elementów pochodzących z JDBC do utworzonej tabeli zagnieżdżonej.
- Utwórz tabelę tymczasową i wstaw listę przedmiotów. Następnie wykonaj JOIN do głównej tabeli (1 zapytanie) i uzyskaj wyniki.
[SQL Injection Hooooorrrrraayay!] (Http://bobby-tables.com/) * Sidenote: * Użycie sparametryzowanych zapytań dałoby również lepszą wydajność. – Bobby
Podałeś powód * - jakiegokolwiek powodu, dla którego nie używasz sparametryzowanego zapytania? –
Zmniejszenie całkowitej liczby zapytań wykonanych przez odtworzenie wielu par identyfikatorów SheetID w każdym zapytaniu ("GDZIE para 1 lub para 2 lub para 3 itd ...") zmniejszyłoby część narzutów. –