Linq to sql linq性能问题

Linq to sql linq性能问题,linq-to-sql,Linq To Sql,我有一个运行速度非常慢的半复杂LINQ查询。我不相信它正在使用子查询。我尝试使用日志记录,只看到生成的一个查询。代码类似于以下内容: dc.defferedloadingenabled = false dc.objecttrackingenabled = false dataloadoptions dlo = new dataloadoptions dlo.loadwith<MyQuestion>(q => q.lotsofresponses) dc.LoadOptions

我有一个运行速度非常慢的半复杂LINQ查询。我不相信它正在使用子查询。我尝试使用日志记录,只看到生成的一个查询。代码类似于以下内容:

dc.defferedloadingenabled = false
dc.objecttrackingenabled = false

dataloadoptions dlo = new dataloadoptions
dlo.loadwith<MyQuestion>(q => q.lotsofresponses)
dc.LoadOptions = dlo

IQuerayable<Question> questions = dc.questions.where( q => q.ParentId == specificID).orderBy(q => q.Rank);

foreach (question in questions)
{
}

因为您已经通过日志记录捕获了查询,所以将其带到SqlStudio并检查执行计划

  • 你不应该看到你的眼睛。如果您看到这一点,请向表中添加主键
  • 您不应该在LotsOfResponses表上看到ClusteredIndexScan。如果您看到这一点,请在LotusSofResponses表的外键列上添加一个索引
  • 您应该在问题表上看到ClusteredIndexSeek或IndexSeek。如果看不到这一点,请将Questions.ParentId设置为主键或在主键上添加索引(以最合适的为准)
另外,使用

SET STATISTICS IO ON 
SET STATISTICS TIME ON

并查看“消息”选项卡中的性能指标。

是否有适当的索引。这看起来并不太复杂,我能看到的唯一问题是大量数据,在适用的情况下没有索引?这是datacontext类型的第一个查询(会产生大量dll加载成本)?“每个问题都有很多答案”意味着一万个或更多的答案?查询通常获取多少行?行有多宽(sp_spaceused-KB/行数)?这些表真的是视图吗?我已经用生成的SQL更新了。它里面有一个“count(*)在我看来有点奇怪。但是,我不太懂SQL,所以我不确定。生成的带有Count(*)的子查询不是问题。Responses.QuestionId应编入索引。Questions.SurveyId应为索引或PrimaryKey。使用“sp_help tablename”查看tablename上的索引。
SET STATISTICS IO ON 
SET STATISTICS TIME ON