gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:00:36 25 4
gpt4 key购买 nike

我有一个大约需要 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 数据库结合使用

最佳答案

这听起来像是参数嗅探;即典型的参数化计划缓存问题,其中查询计划是使用初始示例参数值生成的,结果需要一个与其他一些值截然不同的计划。如果数据有偏差,这很常见 - 例如,某些值会有 3 个匹配项,而其他值会有 300,000 个匹配项。这通常是在 OPTION (OPTIMIZE FOR ... UNKNOWN) 提示开始起作用时,但这需要 或者 您的 ORM 能够指定此提示,或者让您手动编写 SQL。

关于c# - 与硬编码整数值相比,使用整数变量时 Linq to SQL 查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44652656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com