Tôi đã gặp vấn đề tương tự, với một yêu cầu rất đơn giản (SELECT. FROM. WHERE =.) Mất tới 10 giây để trả về một hàng duy nhất khi sử dụng kết nối jdbc trong Java, trong khi chỉ mất 0,01 giây trong sqlshell. Vấn đề giống nhau cho dù tôi đang sử dụng trình điều khiển MS SQL chính thức hay trình điều khiển JTDS.
Giải pháp là thiết lập thuộc tính này trong url jdbc: sendStringParametersAsUnicode =false
Ví dụ đầy đủ nếu bạn đang sử dụng trình điều khiển chính thức của MS SQL: jdbc:sqlserver:// yourerver; instanceName =yourInstance; databaseName =yourDBName; sendStringParametersAsUnicode =false;
Hướng dẫn nếu sử dụng các trình điều khiển jdbc khác nhau và các thông tin khác được tiết lộ về sự cố tại đây: http://emransharif.blogspot.fr/2011/07/performance-issues-with-jdbc-drivers.html
Trong trường hợp của tôi, tôi có hơn 30 triệu bản ghi trong bảng mà tôi đang tìm kiếm. Thời gian để hoàn thành yêu cầu tăng từ hơn 10 giây xuống còn khoảng 0,01 giây sau khi áp dụng thuộc tính.
Hy vọng điều này sẽ giúp ai đó!