SQLServer2008 + .NETFrameworkで速度改善

「数十万件から最新1000件を検索するのに10秒以上かかってしまうのが遅い」とのこと。
10秒以上かかってしまう操作の手順は
1.画面から検索条件を入力。
2.ADO.NET(System.Data.SqlClient)経由でSQLServerにSQL文発行。
3.SqlDataReader経由でレコードをDataGridに展開。
デバッガでトレースしたところ2のSQL文発行に多くの時間を消費してました。
SQL文をいじろうと思って「SQL Server Management Studio」のクエリウィンドウでSQL文を発行したところ、何のカスタマイズもせずに数秒で検索できてしまいました。
これには驚きました。
違いといえば・・・ADO.NET経由の時は検索条件をパラメータ渡しだったのをクエリウィンドウではリテラルで書いた事。
つまりSqlCommandに渡すパラメータに問題があるという事のようです。
すぐに思いついたのがパラメータを投入するときにSQLServer側の型指定をしていないことでした。
早速型指定付(SqlDbType)でパラメータを渡してやるようにしたら数秒で終わるようになりました。
これらから推測するに「1レコード毎の検索条件判断毎」に「型指定無しのパラメータからSQLServer用の型に推測変換処理」が行われているのではないでしょうか。
ただ型推測はクライアント側で行われるような気もするので、まだまだ調査が必要です。

Author: kachi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です