私は cmd.Parameters.AddWithValue を使用しており、クエリを実行するために DBType (int、varchar、...) を指定していません。SQL プロファイラーを調べたところ、このメソッドで実行されたクエリは、データ型を指定した場合よりもはるかに遅くなるようです。
どれほど遅いかを示すために、例を示します。クエリは 1 つのテーブルに対する単純な検索であり、where ステートメントの列にはインデックスが付けられます。データ型を指定すると、特定のクエリが約 0 MS (SQL サーバーで測定するには小さすぎる) で実行され、41 回の読み取りが必要になります。DBType を削除すると、約 200 ミリ秒かかり、クエリが完了するまでに 10000 回の読み取りが発生します。
SQLプロファイラーが値を誤って報告しているだけなのか、これらの値が実際に正しいのかはわかりませんが、DBTypeを追加および削除できるという点で再現可能であり、SQLプロファイラーで指定された値が生成されます.
他の誰かがこの問題に遭遇し、それを修正する簡単な方法がありますか. コード全体にデータ型を追加できることはわかっていますが、それは追加するものがたくさんあるように思えます。それを修正する簡単な方法があれば、それは大歓迎です。
[編集]
いくつかの初期テスト (両方のシナリオをループで実行) の後、プロファイラーが提供する値は正確であるように見えます。
追加情報として、Windows XP Pro で .Net 2.0 を実行し、DB 用に Windows 2000 で SQL Server 2000 を実行しています。
[アップデート]
掘り下げた後、関連する可能性のあるこのブログ投稿を見つけることができました。.Net の文字列値 (Unicode であるため) は、nvarchar パラメータとして自動的に作成されるようです。この問題を解決するために何かできるかどうかを確認するために、仕事に入る月曜日まで待つ必要があります。それでも、私が避けようとしていたデータ型を設定する必要があるようです。
この問題は、私が行ったすべてのクエリで発生するわけではなく、いくつかを選択しただけなので、問題のあるクエリで DBType を設定することに頼るかもしれませんが、問題に対するより一般的な解決策を探しています。