c# – 使用interger变量与硬编码整数值相比,Linq to SQL查询非常慢

我有一个大约需要10秒钟才能执行的查询.
奇怪的是,如果我用硬编码的整数(例如3)替换“machineNo”参数,则查询需要一瞬间.这是我迄今遇到的最不寻常的性能问题.
public static IEnumerable<vwJobAppointment> GetAllJobs(int machineNo)
{
var db = new DbContext();
IEnumerable<vwJobAppointment> list;
list = db.vwJobAppointments.Where(a => a.ResourceId == (machineNo)).AsNoTracking().ToList();
return list;
}
查询需要10秒钟
public static IEnumerable<vwJobAppointment> GetAllJobs(int machineNo)
{
var db = new DbContext();
IEnumerable<vwJobAppointment> list;
list = db.vwJobAppointments.Where(a => a.ResourceId == (3)).AsNoTracking().ToList();
return list;
}
此查询需要一秒钟.
有任何想法吗?我正在使用Entity Framework 5和SQL 2008数据库
解决方法:
EF查询被转换为SQL. SQL使用查询计划来优化查询.变量往往会使程序变慢.在某些情况下,如果在临时表中选择输入变量并将此表连接到通常检查输入变量的位置,则可以克服此问题.该过程的另一个好处是您可以强制执行查询计划.我建议:
>创建一个将资源ID作为输入的存储过程
>尝试在临时表中选择输入变量并加入
>如果这不会有助于强制执行查询计划