Jeg havde lignende problem, med en meget simpel anmodning (SELECT . FROM . WHERE =.) som tog op til 10 sekunder at returnere en enkelt række, når jeg brugte en jdbc-forbindelse i Java, mens jeg kun tog 0.01s i sqlshell. Problemet var det samme, uanset om jeg brugte den officielle MS SQL-driver eller JTDS-driveren.
Løsningen var at opsætte denne egenskab i jdbc-url'en:sendStringParametersAsUnicode=false
Fuldstændig eksempel, hvis du bruger MS SQL officiel driver:jdbc:sqlserver://yourserver;instanceName=yourInstance;databaseName=yourDBName;sendStringParametersAsUnicode=false;
Instruktioner, hvis du bruger forskellige jdbc-drivere og mere detaljeret information om problemet her:http://emransharif.blogspot.fr/2011/07/performance-issues-with-jdbc-drivers.html
I mit tilfælde havde jeg 30M+ poster i tabellen, jeg søgte fra. Varigheden for at fuldføre anmodningen gik fra mere end 10 sekunder til cirka 0,01 s efter anvendelse af egenskaben.
Håber dette vil hjælpe nogen!