Ich lese 1 mln Datensätze von Oracle DB mit. NET und Java. In .Net verwende ich ODP.Net, in Java ojdbc6 Thin Client. In .Net-Lesedaten dauert etwa 10 Sekunden, und in Java dauert es fast 2 Minuten. Warum gibt es so große Unterschiede?
Hier ist ein Code:
.Net:
%Vor%Java:
%Vor%EDIT: setFetchSize () hat den Job erledigt, danke.
In der Standardeinstellung werden ResultSets vollständig abgerufen und im Speicher gespeichert. Dies ist nicht gut für Abfragen mit großen ResultSets. Um ein gestreamtes Ergebnis zu verwenden, müssen Sie Folgendes verwenden:
%Vor%Ich habe die Zeit nicht verglichen, aber ich denke, das wird viel schneller.
Nach meiner Erfahrung ist der Oracle JDBC-Treiber für den Massentransfer standardmäßig nicht ordnungsgemäß konfiguriert. Standardmäßig werden nur 10 Datensätze gleichzeitig im Netzwerk übertragen. Wenn Sie also 1.000.000 Datensätze haben, wird der Treiber 100.000 Netzwerkzugriffe verursachen.
Sie können ResultSet
angeben, wie viele Datensätze gleichzeitig mit diesem Code abgerufen werden sollen:
Fühlen Sie sich frei, mit verschiedenen Größen zu experimentieren. Es hat die Verarbeitungszeit (von Minuten bis Sekunden) in mindestens einer Anwendung, an der ich gearbeitet habe, drastisch verringert.