gpt4 book ai didi

c# - EntityFramework - 查询执行时间取决于选择顺序?

转载 作者:太空狗 更新时间:2023-10-29 23:33:42 26 4
gpt4 key购买 nike

我注意到奇怪的行为。我有商家和订单表,并做了两个选择,一个之后,选择非常简单(从商家中选择 *,从订单中选择 *)。

这是 sql 分析器跟踪,当我首先选择商家时,然后是订单: enter image description here

请注意,订单选择耗时 75 秒(这是 ~80.000 条记录,在一台真正体面的机器 8GB 内存、SSD、i7 上)。

现在,如果我更改顺序并选择第一个订单,那么商家: enter image description here

订单查询执行时间在探查器中下降到 2.5 秒,但在应用程序中它与第一种情况大致相同(我猜是因为 EF inside 试图将订单绑定(bind)到商家,因为它们之间有外键)。

所以问题是为什么探查器看到不同的时间以及 EF 在第二种情况下做了这么长时间,可能是配置错误?

更新:我已经开始使用干净的 EF 模型定位问题,它工作正常。我正在使用 EF T4 模板生成上下文和实体类,所以它可能已经过时并导致问题,我会告诉你是否会找到具体的东西 - 我认为这与修复集合有某种关系,所以看起来 SQL 分析器具有误导性- 我猜查询执行正常,只是它等待 EF 完成读取结果或 smth(我的意思是可能 EF 在读取结果时做了一些昂贵的事情)。

 using (var myEntities = new myEntities())
{
var merchants = myEntities.Merchants.ToList();
var orders = myEntities.Orders.ToList();
}

最佳答案

读取是相同的:两组数据只有 CPU 和持续时间不同。

在第一次迭代中,您将数据从磁盘加载到 SQL Server 的缓存中。第二个查询然后从 RAM 而不是磁盘读取 4008 页。商家数据也是如此,但规模较小

注意:缓存的是表数据和索引,不是查询结果。查询将每次都重新执行。此缓存由 SQL Server 保持最新

您说过这是可重复的:所以向我们展示代码。没有运行任何清除缓存的 DBCC? SET 选项是否相同?

关于c# - EntityFramework - 查询执行时间取决于选择顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923480/

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