Miałem podobny problem, z bardzo prostym żądaniem (SELECT . FROM . WHERE =.) zajmującym do 10 sekund na zwrócenie pojedynczego wiersza przy korzystaniu z połączenia jdbc w Javie, podczas gdy w sqlshell zabierało tylko 0,01 s. Problem był taki sam, niezależnie od tego, czy używałem oficjalnego sterownika MS SQL, czy sterownika JTDS.
Rozwiązaniem było ustawienie tej właściwości w adresie URL jdbc :sendStringParametersAsUnicode=false
Pełny przykład, jeśli używasz oficjalnego sterownika MS SQL:jdbc:sqlserver://twójserwer;instanceName=twojainstancja;databaseName=twoja_nazwa_bazy_danych;sendStringParametersAsUnicode=false;
Instrukcje dotyczące korzystania z różnych sterowników jdbc i bardziej szczegółowe informacje o problemie znajdują się tutaj:http://emransharif.blogspot.fr/2011/07/performance-issues-with-jdbc-drivers.html
W moim przypadku w tabeli, z której szukałem, miałem ponad 30 milionów rekordów. Czas trwania żądania wydłużył się z ponad 10 sekund do około 0,01 s po zastosowaniu właściwości.
Mam nadzieję, że to komuś pomoże!