次の Code First エンティティがあります。
public class Department
{
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
}
私が設定した構成により、次の表が作成されます。
dbo.Departments
DepartmentID INT PRIMARY KEY
DepartmentName VARCHAR(75)
DepartmentName に手動でインデックスを追加し、次のクエリを実行しました。
var depts = new string[] { "Engineering", "Manufacturing" };
var departments = from d in db.Departments
where depts.Contains(d.DepartmentName)
select d;
トレースを実行すると、次の SQL が生成されました。
SELECT
[Extent1].[DepartmentID] AS [DepartmentID],
[Extent1].[DepartmentName] AS [DepartmentName]
FROM [dbo].[Departments] AS [Extent1]
WHERE [Extent1].[DepartmentName] IN (N'Engineering',N'Manufacturing')
私の列は varchar であり、クエリはテキストを NVARCHAR に変換しているため、オプティマイザーは DepartmentName インデックスでインデックス シークの代わりにクラスター化インデックス スキャンを実行することを選択しています。
データベースを nvarchar を使用するように変更する以外に、これを修正する方法はありますか? これはバグですか、それとも正常ですか?