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