所以我的项目中有一个非常基本的数据模型(针对 .NET 4.0,使用 NuGet 安装的 EF 5,首先是数据库),有 2 个表,Item 和 ItemGroup。
Item-table 具有各种字段,包括字符串和数字,以及指向 ItemGroup 的外键。
另一方面,ItemGroup 只有 Id、Name 和 Code(其中最后两个是字符串)。
现在,我有大约 5 万个项目,只有 100 个项目组。如果我context.Items.ToList()
使用 SQL Profiler 执行 a ,则持续时间约为 2-3 秒,这是完全可以接受的。但是,如果我想同时使用 加载 ItemGroups context.Items.Include("ItemGroup").ToList()
,则执行时间会上升到大约 12 秒。此外,如果我在获取所有项目后简单地获取所有项目组,执行时间也很长。这让我相信,将项目映射到它们各自的组需要时间。
但是,这仍然不能解释为什么 SQL Profiler 报告非常简单的 INNER JOIN 查询也需要超过 10 秒,而没有 JOIN 的相同查询只需要 2-3 秒。
我在这里不知所措,以前从未遇到过这种问题,所以任何建议都非常受欢迎。