我有一个简单的 EF 实现,我在其中检索约 20K 记录并包含两个子实体:
using (InsightEntities context = new InsightEntities())
{
return context.Accounts
.Include(x => x.Division)
.Include(x => x.Division.Company)
.OrderBy(x => x.ID)
.AsNoTracking()
.ToList();
}
当我通过 SQL Profiler 分析 EF 调用时,SQL 命令的持续时间约为 1.2 秒,即使在后续调用中也是如此。但是,如果我复制并粘贴 EF 生成的相同 SQL 并直接通过 SSMS 运行它,则持续时间是一半。
下面是 EF 调用(红色椭圆)和直接调用(绿色椭圆)的屏幕截图:
我知道 EF 在将数据映射到对象、解释关系等方面做了很多工作,但为什么单独查询所需的时间是直接运行相同查询的两倍呢?是否对可能优化查询的默认 EF 连接字符串进行了更改?
(我应该补充一点,查询本身已经完全优化了所有外键的索引。)
谢谢!