嵌套LINQ以获得最佳性能的摘要或调查
本文关键字:调查 性能 最佳 LINQ 嵌套 | 更新日期: 2023-09-27 18:18:29
我有一个包含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.
你总是必须考虑在数据量管理。