Ist while (rs.next ()) schneller als eine Reihe von rs.absolute ()

8

Angenommen, ein ResultSet rs mit n -Objekt zu haben.

Dieser Code:

%Vor%

ist diesem Code algorithmisch gleich (d. h. beide ergaben das gleiche Ergebnis):

%Vor%

Aber sind diese Äquivalenz mit den Begriffen der Durchgängigkeit identisch? Ist der erste schneller? Oder, für ein gegebenes i , ist rs.next () nur ein Wrapper für rs.absolute(i+1) ?

Mit freundlichen Grüßen MC

    
BAD_SEED 19.12.2012, 14:26
quelle

2 Antworten

6

rs.next erfordert eine einfachere Art von Datenbankcursor ( FORWARD_ONLY ) als rs.absolute . In den meisten Fällen verschlechtern Sie die Leistung / Ressourceneffizienz mit rs.absolute . In bestimmten Fällen, in denen es sowieso keine Optimierung für einen FORWARD_ONLY Cursor gibt, erhalten Sie möglicherweise die gleiche Leistung.

Einige Treiber können absolute Aufrufe sogar mit FORWARD_ONLY zulassen, was bestätigt, dass der angeforderte Datensatz der nächste ist, aber wieder andere können eine Ausnahme auslösen.

    
Marko Topolnik 19.12.2012, 14:31
quelle
2

Das vorherige rs.next() könnte schneller sein, obwohl es von der zugrundeliegenden Implementierung abhängt und in Wirklichkeit könnten Sie aufgrund der internen Optimierungen dieselbe Leistung erzielen.

Der Fahrer berücksichtigt die aktuelle Position möglicherweise nicht, wenn er rs.absolute() ausführt, so dass er leicht etwas Overhead hat, während er in rs.next() nur vorwärts geht.

Wenn Sie also alle Ergebnisse durchlaufen müssen, verwenden Sie einfach rs.next() . Wenn Sie zu einem bestimmten Ergebnis springen müssen, verwenden Sie rs.absolute() .

Denken Sie daran, dass die Ergebnismenge tatsächlich oft remote von der Datenbank gehandhabt wird (es sei denn, es handelt sich um CachedResultSet ), daher kann das Hin- und Hergehen mehr Overhead verursachen als Sie denken.

    
jbx 19.12.2012 14:33
quelle

Tags und Links