Megvizsgáltam a kérdést, hogy melyik a hatékonyabb megoldás egy rekord mezőinek lekérésére: az r.getObject("fieldName") vagy az r.getObject(fieldIndex), ahol az r változó egy ResultSet objektumra mutat. A kísérleti eredmények igazolták azt a gyanúmat, hogy gyorsabb index alapján lekérni a mező értékét. A kísérletekben 3500 rekordot olvastunk ki a ResultSet objektumból.
|
Kísérlet sorszáma |
r.getObject("fieldName") (ms) |
r.getObject(fieldIndex) (ms) |
|---|---|---|
| 1 | 109 | 85 |
| 2 | 61 | 33 |
| 3 | 50 | 34 |
| 4 | 36 | 35 |
| 5 | 51 | 20 |
| 6 | 23 | 36 |
| 7 | 34 | 34 |
| 8 | 28 | 30 |
| 9 | 25 | 27 |
| 10 | 29 | 26 |
| Átlag | 44,6 | 36,0 |
Az eredmény szerint a második módszer 19,3 %-al gyorsabb. Ugyanakkor persze kevésbé olvasható kódot eredményez. A két kódrészlet a következő képpen néz ki:
try (ResultSet r = s1.executeQuery("SELECT * FROM \"TelepulesTable\"")) {
while (r.next()) {
pse2.setIndex(1);
pse2.setString(r.getString("telepulesNev"), true);
pse2.setInt((Integer) r.getObject("iranyitoSzam"));
}
}
try (ResultSet r = s1.executeQuery("SELECT \"telepulesNev\",\"iranyitoSzam\" FROM \"TelepulesTable\"")) {
while (r.next()) {
pse2.setIndex(1);
pse2.setString(r.getString(1), true);
pse2.setInt((Integer) r.getObject(2));
}
}
Az eredmények alapján kijelenthető hogy akkor érdemes az indexes módszert alkalmazni, ha nagyon sok rekorddal dolgozunk, egyébként nem olyan jelentős az eltérés.