我有一个包含3个
表的数据库由于我的调查非常灵活,支持多种风格的调查(数据调查生成图表,分析或预测某些内容)
这就是为什么,我想获得与特定调查相关的所有问题日志...
所以我想知道查询的最佳性能方式是什么?
我对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
非常欢迎任何其他情况!
提前致谢
答案 0 :(得分:0)
在我看来,你拥有的最佳表现是你的第三种选择。
数据库服务器旨在有效地返回数据。 我认为如果你创建存储过程更好,为什么编译存储过程并在执行中考虑它。
所有这些与linq你将有一个良好的表现。
数据库+存储过程 也许你不需要使用linq。
您始终必须考虑在数据量中进行管理。