2012-10-02 5 views
1

데이터 범위에서 계산을해야하는 작은 프로그램이 있습니다. 이 범위에는 약 반 밀리 온의 레코드가 포함될 수 있습니다. 방금 db를보고 group by이 실행 된 것을 보았습니다.다른 IQueryable 객체가 결합되어 있습니까?

결과가 첫 번째 행에서 실행 된 것으로 생각하고 나중에 RAM의 데이터로 작업했습니다. 하지만 이제 쿼리 작성기가 표현식을 결합한다고 생각합니다.

내 실제 앱에는 첫 번째 쿼리에서 선택한 범위를 기반으로하는 하위 쿼리가 더 있습니다. 나는 DB가 다른 선택을하도록 큰 오버 헤드를 추가했다고 생각한다.

이제 첫 번째 표현 이후에 basicly .ToList()을 호출합니다.

그래서 내 질문에 대한 쿼리 작성기가 식 트리를 작성할 때 다른 IQueryable 결합합니다 맞습니까?

답변

4

네, 맞습니다. LINQ 표현식은 평가할 때 느리게 평가됩니다 (예 : .ToList()). 그 시점에서 Entity Framework는 전체 쿼리를보고이를 나타내는 SQL 문을 작성합니다.

이 아닌 경우은 SQL 데이터베이스가 그룹화 및 계산과 같은 집합 기반 작업을 수행하도록 최적화되어 있기 때문에 첫 번째 쿼리를 평가하지 않는 것이 좋습니다. 데이터베이스에 모든 Test 개체를 유선으로 보내고 결과를 메모리 내 개체로 deserialize 한 다음 로컬에서 그룹화 및 계산을 수행하는 대신 SQL 데이터베이스에서 결과 Count를 반환하면 성능이 향상됩니다.

관련 문제