嵌套LINQ以获得最佳性能的摘要或调查



我有一个包含3个表的数据库

    <
  • 调查表/gh>
  • 调查问题表(以调查id链接)
  • 调查问题日志表(链接调查问题id)

因为我的调查非常灵活,支持多种风格的调查(数据调查生成图表,分析或预测某事)

这就是为什么,我想把所有与具体调查有关的问题日志都收集起来处理……

所以我想知道查询的最佳性能方式是什么?

我不太熟悉LINQ,凭我的小脑袋,我只能想到3种方法


1嵌套FROM (FROM inside FROM)

然而,我知道这将是在普通SQL中做的最糟糕的事情,但是LINQ呢?这是一个好的选择吗?优势:传输数据最少,调查表格和调查问题表格各1份缺点:需要query = survey x survey_question x survey_question_log次数

from sv in SURVEYs
where sv.PROJECT_ID == 6 &&
        sv.ACTIVE == 1
select new {sv, sq = (from sq in SURVEY_QUESTIONs
                        where sq.SURVEY_ID == sv.ID
                        select new { sq, sql = (
                                    from sql in SURVEY_QUESTION_LOGs
                                    where sql.SURVEY_QUESTION_ID == sq.ID
                                    select new { sql }) })}

如果在正常的SQL,我认为这是最好的方式优点:1 .查询,安全的数据库服务器缺点:传输数据多,会得到大量无用的数据(大量重复的调查数据);调查问题数据)

from sv in SURVEYs
join svq in SURVEY_QUESTIONs
on sv.ID equals svq.SURVEY_ID into ssvq
from subsvq in ssvq.DefaultIfEmpty()
join svql in SURVEY_QUESTION_LOGs
on subsvq.ID equals svql.SURVEY_QUESTION_ID into ssvql
from subsvql in ssvql.DefaultIfEmpty()
where sv.PROJECT_ID == 6 &&
sv.ACTIVE == 1
select new { sv, subsvq, subsvql }

3 EXTERNAL QUERY(从数据库中获取数据并自行查询)我还想到从3个表中查询数据,并利用LINQ的优势,通过使用服务器CPU进行查询…它也会被考虑吗?优势:查询3次(survey, survey_question, survey_question_log)缺点:不知道,不确定哪一个会更快?数据库+ sql?服务器+ linq?

from sv in SURVEYs select sv;
from svq in SURVEY_QUESTIONs select svq;
from svql in SURVEY_QUESTION_LOGs select svql;
//foreach LINQ here
//may be as same as CASE 1, but do in SERVER here

任何其他情况是非常受欢迎的!

Thanks in advance

在我看来,最好的表现是你的第三个选择。

数据库服务器的设计是为了有效地返回数据。我认为如果你把存储过程做得更好,为什么存储过程是编译的,它会在执行中被考虑到。

这一切与linq你会有一个很好的表现。

数据库+存储过程也许你不需要使用linq.

你总是必须考虑在数据量管理。

最新更新