Имах подобен проблем, с много проста заявка (SELECT . FROM . WHERE =.), която отнема до 10 секунди за връщане на един ред при използване на jdbc връзка в Java, докато отнема само 0,01 s в sqlshell. Проблемът беше същият, независимо дали използвах официалния MS SQL драйвер или JTDS драйвера.
Решението беше да се настрои това свойство в URL адреса на jdbc:sendStringParametersAsUnicode=false
Пълен пример, ако използвате официален драйвер на MS SQL:jdbc:sqlserver://yourserver;instanceName=yourInstance;databaseName=yourDBName;sendStringParametersAsUnicode=false;
Инструкции, ако използвате различни jdbc драйвери и по-подробна информация за проблема тук:http://emransharif.blogspot.fr/2011/07/performance-issues-with-jdbc-drivers.html
В моя случай имах 30 милиона + записа в таблицата, от която търсех. Продължителността за изпълнение на заявката премина от повече от 10 секунди до приблизително 0,01 секунди след прилагане на свойството.
Надяваме се, че това ще помогне на някого!