实体框架性能调优

时间:2014-03-13 19:52:02

标签: sql-server entity-framework-5

我们正在使用实体框架来查询SQL服务器数据库。 LINQ表达式是IQueryable。此查询大约需要10秒钟才能执行。如果这是在存储过程中,我会使用查询来提高它的效率。但是,如果我使用IQueryable,实体框架本身是否决定如何构建有效的查询,或者我是否必须使用linq表达式并通过反复试验提高性能?

3 个答案:

答案 0 :(得分:0)

如果您使用的是EF 6,则可以非常轻松地启用日志记录。然后,您可以检查每个呼叫正在执行的操作。我会从那里开始。 MSDN EF6 Logging

您是否能够分享有关查询和结果大小的更多信息?

答案 1 :(得分:0)

作为一名数据库开发人员而非C#开发人员,并且对实体框架细节的了解非常有限,我可以说:

我的理解是实体框架决定如何构建查询,可能没有太多理解效率的能力。在你的Linq查询或Lambda表达式中可能有一些你可以做得更好或者更糟的东西,但是在大多数情况下你可能无法真正调整查询。这是使用ORM的一个主要缺点,至少从DBA的角度来看,当服务器爬到停止时他们无法做任何事情来修复查询而且它不像你总是可以添加一个索引; - )。

我还可以说你在Entity Framework中有选项为每个DML操作指定一个存储过程,这样如果你真的需要用这个特定的查询做一些更好的事情,那么为此创建一个存储过程一个操作并将EF对象指向它以进行SELECT,但允许EF为INSERT / UPDATE DELETE构建查询。

这有帮助吗?

答案 2 :(得分:0)

  

实体框架本身是否决定如何构建有效的查询

EF将始终自动确定如何构建查询,而sql -server也会自动优化查询。

  

我是否必须使用linq表达式并通过反复试验提高性能?

您可以尝试使用查询,但通常较小的更改不会影响性能(就表达式的排序而言)

您始终可以使用SQL Profiler来查看EF的功能,并了解查询的效率。如果需要很长时间,您可以在SSMS中重新运行查询并打开Include Actual Execution Plan并确定查询速度慢的位置。