[英]Seemingly simple query being very slow on Entity Framework
所以我的项目中有一个非常基本的数据模型(针对 .NET 4.0,使用 NuGet 安装的 EF 5,首先是数据库),有 2 个表,Item 和 ItemGroup。
Item-table 有各种字段,包括字符串和数字,以及一个指向 ItemGroup 的外键。
另一方面,ItemGroup 只有 Id、Name 和 Code(其中最后 2 个是字符串)。
现在,我大约有 5 万个项目,而只有 100 个项目组。 如果我使用 SQL Profiler 执行context.Items.ToList()
,持续时间约为 2-3 秒,这是完全可以接受的。 但是,如果我想使用context.Items.Include("ItemGroup").ToList()
同时加载 ItemGroups,则执行时间会跳到大约 12 秒。 此外,如果我在获取所有项目后简单地获取所有项目组,执行时间也很长。 这让我相信需要时间的是将项目映射到它们各自的组。
然而,这仍然不能解释为什么 SQL Profiler 报告非常简单的 INNER JOIN 查询也需要超过 10 秒,而没有 JOIN 的相同查询只需要 2-3 秒。
我在这里不知所措,以前从未遇到过这种问题,因此非常欢迎任何建议。
当您使用预先加载(包含)时,它会立即从数据库中加载整个数据库树。所以它非常慢。
但是,您可以通过使用LinqPad将 EF 查询转换为 T-SQL ,然后使用Sql Server 2008上的数据库引擎优化顾问来确定需要改进的领域,这将帮助您确定所需的索引键。
Microsoft 还发布了一篇关于 EF 性能注意事项的文章,您可能需要阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.