包含在 Entity Framework 中的性能问题
Performance Issues with Include in Entity Framework
我正在使用存储库模式、Web API 开发一个大型应用程序,AngularJS。在其中一种情况下,我试图从与大约有关系的单个线索中检索数据。 20张桌子。延迟加载已禁用,因此我使用 Include 从所有 20 个表中获取数据。现在,性能问题来了,如果我尝试检索单个记录,大约需要。 15 秒。这是一个巨大的性能问题。我正在返回 JSON 并且我的实体装饰有 DataContract(IsReference = true)/ Data Member 属性。
如有任何建议,我们将不胜感激。
include 因其连接方式而对性能非常不利。
在我的博客 post 此处 http://mikee.se/Archive.aspx/Details/entity_framework_pitfalls,_include_20140101
查看更多信息
稍微总结一下问题是因为 EF 通过加入来处理包含。这将创建一个结果集,其中每一行都包含每个连接实体的每一列(有些包含空值)。
如果根实体包含大字段(如长文本或二进制文件),这会更加令人讨厌,因为该字段会重复。
15 秒太多了。我怀疑还有其他原因,比如缺少索引。
总结解决方案。我的建议通常是单独加载每个关系或在多查询中加载。根据您的设置,像这样的简单查询应该是每个实体 5-30 毫秒。在这种情况下,它仍然会很慢(如果您正在查询索引,则约为 1 秒)。如果此查询经常 运行(缓存、文档、数据库中的 json),您可能需要寻找某种方法以更好的格式存储此数据。不过我帮不了你,因为更新路径对可能性的影响很大,所以需要更多信息。
通过启用延迟加载提高了性能。
我正在使用存储库模式、Web API 开发一个大型应用程序,AngularJS。在其中一种情况下,我试图从与大约有关系的单个线索中检索数据。 20张桌子。延迟加载已禁用,因此我使用 Include 从所有 20 个表中获取数据。现在,性能问题来了,如果我尝试检索单个记录,大约需要。 15 秒。这是一个巨大的性能问题。我正在返回 JSON 并且我的实体装饰有 DataContract(IsReference = true)/ Data Member 属性。
如有任何建议,我们将不胜感激。
include 因其连接方式而对性能非常不利。
在我的博客 post 此处 http://mikee.se/Archive.aspx/Details/entity_framework_pitfalls,_include_20140101
查看更多信息稍微总结一下问题是因为 EF 通过加入来处理包含。这将创建一个结果集,其中每一行都包含每个连接实体的每一列(有些包含空值)。
如果根实体包含大字段(如长文本或二进制文件),这会更加令人讨厌,因为该字段会重复。
15 秒太多了。我怀疑还有其他原因,比如缺少索引。
总结解决方案。我的建议通常是单独加载每个关系或在多查询中加载。根据您的设置,像这样的简单查询应该是每个实体 5-30 毫秒。在这种情况下,它仍然会很慢(如果您正在查询索引,则约为 1 秒)。如果此查询经常 运行(缓存、文档、数据库中的 json),您可能需要寻找某种方法以更好的格式存储此数据。不过我帮不了你,因为更新路径对可能性的影响很大,所以需要更多信息。
通过启用延迟加载提高了性能。