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

时间:2014-08-18 22:20:49

标签: c# sql database performance linq

我有一个包含3个

表的数据库
  • 调查表
  • 调查问题表(与调查ID相关联)
  • 调查问题日志表(与调查问题ID链接)

由于我的调查非常灵活,支持多种风格的调查(数据调查生成图表,分析或预测某些内容)

这就是为什么,我想获得与特定调查相关的所有问题日志...

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

我对LINQ不熟悉,从我的小脑子里,我只能想到3种方式


1 NESTED FROM(来自内部)

然而,我知道这将是普通SQL中的坏事,但是LINQ呢?这是一个不错的选择吗? 优势:最低转移数据,调查表和调查问题表(每个1个) 缺点:它将采用query = survey x survey_question x survey_question_log times

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 }) })}

2 SINGLE QUERY(左连接)

如果在普通的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

非常欢迎任何其他情况!

提前致谢

1 个答案:

答案 0 :(得分:0)

在我看来,你拥有的最佳表现是你的第三种选择。

数据库服务器旨在有效地返回数据。 我认为如果你创建存储过程更好,为什么编译存储过程并在执行中考虑它。

所有这些与linq你将有一个良好的表现。

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

您始终必须考虑在数据量中进行管理。