アダプティブバッファリングは良い答えです。また、接続のSET
を確認することをお勧めします SQLServerプロファイラーを介したオプション。
トレースを開始するときは、ExistingConnections
を確認してください が選択されています。 JDBC接続とSSMS接続のSPIDを比較します。 ARITHABORT
私が見たものとして、SSMSとJDBCドライバーのパフォーマンスに違いが生じることが思い浮かびます。 Microsoftは、ここで簡単に言及しています:http://msdn.microsoft.com/en-us/library/ms190306.aspx。ここにExchange情報をスタックします:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query
Oracleでは、setFetchSize
を試してみると大きな影響があります。 Statement
のメソッド / PreparedStatement
物体。どうやら、SQLServerドライバーはそのメソッドをサポートしていません。ただし、そのドライバーには内部メソッドがあります。詳細については、「JDBCドライバーを使用したSQLServerでのデフォルトの行プリフェッチの設定」を参照してください。
また、while (rs.next())
で何をしていますか ループ? rs.getInt(1)
のように列を読み取る以外に何もしないでください 。何が起こるか見てください。それが飛ぶ場合、それはボトルネックが結果セットの以前の処理にあることを示唆しています。それでも遅い場合は、問題はドライバーまたはデータベースにあるはずです。
SQL Server Profilerを使用して、JDBCを介して実行された実行と、SSMSを介して実行された実行を比較できます。 CPU、読み取り、書き込み、および期間を比較します。それらが異なる場合は、実行プランがおそらく異なるため、最初に述べたSET
に戻ります。 オプション。