Ich hatte ein ähnliches Problem mit einer sehr einfachen Anfrage (SELECT . FROM . WHERE =.), die bis zu 10 Sekunden dauerte, um eine einzelne Zeile zurückzugeben, wenn eine jdbc-Verbindung in Java verwendet wurde, während sie in sqlshell nur 0,01 s dauerte. Das Problem war das gleiche, ob ich den offiziellen MS SQL-Treiber oder den JTDS-Treiber verwendete.
Die Lösung bestand darin, diese Eigenschaft in der jdbc-URL einzurichten:sendStringParametersAsUnicode=false
Vollständiges Beispiel, wenn Sie den offiziellen MS SQL-Treiber verwenden:jdbc:sqlserver://yourserver;instanceName=yourInstance;databaseName=yourDBName;sendStringParametersAsUnicode=false;
Anweisungen zur Verwendung unterschiedlicher JDBC-Treiber und detailliertere Informationen zum Problem hier:http://emransharif.blogspot.fr/2011/07/performance-issues-with-jdbc-drivers.html
In meinem Fall hatte ich mehr als 30 Millionen Datensätze in der Tabelle, in der ich gesucht habe. Die Dauer zum Abschließen der Anfrage ging von mehr als 10 Sekunden auf ungefähr 0,01 Sekunden nach dem Anwenden der Eigenschaft zurück.
Hoffe, das wird jemandem helfen!