实体框架查询优化



我有几个月使用实体框架的经验,主要是针对它编写了大量的数据检索linq查询。我来自一个沉重的sql背景,并试图优化一些sql的性能和可读性,如果我试图调试性能问题。

我注意到一些生成的sql对列{col1,col2,col3}的tableA做这样的事情

select
    Extent1.col1
from
(
   select col1, col2, col3 from tableA
) AS Extent1

我的问题是,我如何防止它做这些无用的派生表,而不是只做

select col1 from tableA 

哪里需要?我似乎不明白为什么它有时会这样,有时却不会……

您是否将生成查询的实际查询执行计划与您将如何优化它进行了比较?你可能会对结果感到惊讶,我知道我是。我对SQL server团队的开发人员产生了深深的敬意,他们似乎做了相当出色的工作,使看似次优的查询执行得一样好。

我很想知道你的经历是否与我不同;我不再寻找改变生成查询的方法,因为对于我尝试查看的每个查询,性能没有真正的差异。

编辑:

我的最后一句话并不完全正确,您必须注意N+1种情况,并且由于处理单个记录的性质,任何批处理操作(同时更新,删除和插入多个记录)在性能上都不会接近手工编写查询。但是,无关的区段基本上会被SQL Server查询优化器剥离。

最新更新