Jag hade liknande problem, med en mycket enkel begäran (SELECT . FROM . WHERE =.) som tog upp till 10 sekunder att returnera en enda rad när jag använde en jdbc-anslutning i Java, samtidigt som jag bara tog 0.01s i sqlshell. Problemet var detsamma oavsett om jag använde den officiella MS SQL-drivrutinen eller JTDS-drivrutinen.
Lösningen var att ställa in den här egenskapen i jdbc url:sendStringParametersAsUnicode=false
Fullständigt exempel om du använder MS SQL officiell drivrutin:jdbc:sqlserver://dinserver;instanceName=yourInstance;databaseName=yourDBName;sendStringParametersAsUnicode=false;
Instruktioner om du använder olika jdbc-drivrutiner och mer detaljerad information om problemet här:http://emransharif.blogspot.fr/2011/07/performance-issues-with-jdbc-drivers.html
I mitt fall hade jag 30 miljoner+ poster i tabellen jag sökte från. Varaktigheten för att slutföra begäran gick från mer än 10 sekunder till ungefär 0,01 s efter att egenskapen tillämpades.
Hoppas detta hjälper någon!