면책 조항 : 모든 답변을 another question에서 찾지 못했습니다.DbQuery 대 IQueryable SQL 성능
LINQPad에서 쿼리를 준비하는 동안 일부 결과는 IQueryable으로 반환되고 일부는 DbSet으로 반환됩니다.
쿼리의 모든 버전
는 여기에서 찾을 수 있습니다 : 된 IQueryable에 관해서는 171 어디 https://dotnetfiddle.net/r1ghBv// returns IQueryable<Message>
// Time : 133 ms
from m in Messages
where m.MessageStatusId < 5 && (
from mm in Messages
where mm.MessageStatusId < 5
group mm by mm.F_Id into g
select g.Key
).Contains(m.F_Id)
select m
대 LINQPad에서
// returns DbQuery<Message>
// Time : 112 ms
from mm in Messages
where mm.MessageStatusId < 5
group mm by mm.F_Id into g
from m in g
select m
을 DbQuery 버전은 IL의 89 개 라인을했다
DbQuery는 클래스 대 IQueryable 인터페이스이며 DbQuery에는 더 많은 메서드가있는 것 같습니다. 그러나 C# .NET 4.5.2 및 Entity Framework 6.x에서 다음 쿼리를 사용하면 어떤 SQL 성능이 더 좋을지 알고 싶습니다.
질문 : 위의
- 어떻게 반환 형식은 쿼리에서 결정있어 무엇입니까?
- DbQuery 버전에는 실제 쿼리 이전에 LINQPad의 SQL 탭에 7 개의 추가 SQL 쿼리가 있었는데, IQueryable 버전 LINQPad에서 간단히 쿼리를 생성했는데 DbQuery가 조금 더 빨랐습니다. Eb 라이브러리 클래스 인 DbQuery 때문입니까?
Linqpad에서 유사한 쿼리를 실행 해봤지만 IOrderedQueryable <>을 쿼리 유형으로 사용했습니다. linqpad에서 작성한 내용을 쉽게 공유 할 수 있습니까? –
LINQPad에서 EF 모델의 dll을 참조했습니다. https://dotnetfiddle.net/r1ghBv에서보고있는 쿼리는 4 개의 개별 LINQPad 탭에서 얻은 것입니다. @RaduPascal에 대한 질문에 대답 했습니까? – ablaze