【问题标题】:Subqueries in EF code first 4.1EF 代码中的子查询优先 4.1
【发布时间】:2012-01-06 15:23:58
【问题描述】:

我在一个相当简单的 EF 4.1 代码优先模型上创建了一个 WCF 数据服务。对于每个请求,我必须提供一个 clientid 来维护我的多租户数据库中的数据隔离。我看到了糟糕的性能,在运行 sql server 跟踪后,我看到所有参数化查询都在使用这样的子查询。

select top 100 <This is because of paging>
colA,
colB,
colC
from (select colA, colB, colC
      from table
      where clientid = 12345)
orderby ..... 

有什么办法可以调整它以跳过选择的子查询?它似乎非常不需要,并且会以惊人的数量级降低性能。

谢谢。

【问题讨论】:

  • 也许需要索引?尝试在 SSMS 中运行相同的查询,看看它是否推荐任何索引。
  • 愿意发布相关的 LINQ 查询吗?

标签: c#-4.0 entity-framework-4 wcf-data-services


【解决方案1】:

有什么办法可以调整它以跳过 select 的子查询?

没有,除非您要为 MSSQL Server(或您正在使用的其他数据库)重写整个 EF 提供程序。

这似乎可笑地不需要,并且会以惊人的数量级降低性能。

您是否真的调查过性能问题的根源?您显示的查询应由数据库服务器上的查询优化器进行优化,并且不会对性能产生任何重大影响。

确保您已正确配置索引和最新数据统计信息。

【讨论】:

  • 谢谢,这正是我所害怕的。我毫不怀疑索引可能存在问题。然而,我要对付的桌子目前在 3.5tb 附近,每个人都不敢碰它。不过,我会研究其影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多