私はLinqからSQLへの巨大なパフォーマンスの問題を発見しました。LinqからSQLへのnvarcharの問題
文字列を使用してテーブルから選択する場合、SQL Serverに渡されるパラメータは、SQLテーブルがvarcharの場合でも常にnvarcharです。この結果、シークの代わりにテーブルスキャンが発生し、パフォーマンス上の大きな問題になります。
var q = (
from a in tbl
where a.index == "TEST"
select a)
var qa = q.ToArray();
パラメータが使用される前にはnvarcharするVARCHARから変換された全体指標になるNVARCHARとして通過させます。
パラメータがvarcharの場合、非常に高速なシークです。
これを上書きまたは変更する方法はありますか?
ありがとうございました よろしくお願いします。 Craig。
あなたのDBMLはどのように見えますか? – RobS
これはvarcharカラムであり、nvarcharカラムではありません。 create table test(test varchar(200)not null) テストでインデックスixtestを作成します。 – Craig
データベースクエリプランは、シークの代わりにCONVERT_IMPLICITとスキャンを使用します。私はこれがLINQ to SQLの一般的な問題だと思う。 パラメータを正しく指定できる回避策を探しています。代わりにvarchar(200)をnvarchar(4)に変換します。 – Craig