0

주 엔터티 customer과 관련 엔터티 (주문)에 대한 쿼리를 모두 컴파일했습니다.성능 - 탐색 속성 대 컴파일 된 쿼리를 통해 데이터 가져 오기

var customer = MyService.GetCustomer<Customer>().where(c => c.Id == fooId).ToList(); 
var customerOrders = MyService.GetOrders<Order>().where(o => o.CustomerId == fooId && o.IsActive).ToList(); 

하지만 내가 대신 컴파일 된 쿼리의 탐색 속성을 통해 모든 주문을받을 수 있다고 생각은 customer부터 이미 아래의 코드에 의해 메모리에로드되는 호출 :

var customerOrders = customer.Orders.where(o => o.IsActive).ToList(); // I didn't do filter further more 

을하지만 타이밍을 측정 할 때 나는 나오지 않았어 (DB에는 500 명의 고객과 4000 개의 주문이 있고 모든 특정 고객에는 30 개의 활성 주문과 약 400 개의 비활성 주문이 있습니다.)

어느 쪽이 더 나은 성능을 낼 수 있습니까?

나는 완전히 엔티티이 related question

답변

0

Linq는 이해할 수없는 SQL에 LINQ 쿼리를 변환합니다. 이 실제로 c.Id 때문에 간단하게 할 수

var customer = MyService.GetCustomer<Customer>().where(c => c.Id == fooId).ToList(); 

고유 :

Customer customer = MyService.GetCustomer<Customer>().SingleOrDefault(c=> c.Id == fooId); 

그냥 먼저 특정 ID로 고객을 얻을 수있다 여기에서 무엇. (이이 쿼리가 얼마나 많은 주문에 고객을 dependend한다) (상수 및 쿼리 주문의 개수에 의존하지 않는) 그런 다음

이 고객의 주문을 조회 :

var customerOrders = customer.Orders.where(o => o.IsActive).ToList(); 

그럼 당신을 위와 동일한 SQL 문으로 연결되는 다른 쿼리를 수행하십시오.

var customerOrders = MyService.GetOrders<Order>().where(o => o.CustomerId == fooId && o.IsActive).ToList(); 

성능 차이가 첫 번째 쿼리에 불과하기 때문입니다.

+0

이 경우 탐색 속성 쿼리가 준수 쿼리보다 낫습니다. – ManirajSS

+0

나는 컴파일 된 쿼리가 의미하는 것을 완전히 얻지 못한다. Linq to Entities는 적은 양의 지원 기능 만 제공합니다. 이 값을 초과하면 데이터베이스에서 더 많은 양의 데이터를 가져와야하며 전체 데이터로 계산 및 가능한 감소를 수행하면 성능이 저하됩니다. 여기를보십시오 https://msdn.microsoft.com/en-us/library/bb738550.aspx –

+0

예를 들어 Regex를 사용하여 데이터를 필터링하는 경우 (예 : .ToList() 또는 .AsEnumerable()) 호출해야하는 경우) SQL 문을 데이터베이스로 보내고 결과 집합을 개체에 매핑합니다. 그럼 당신은 Linq 개체를 사용하여 Regex 기반 필터링을 할 수 –

0

방법에 따라 다릅니다. 당신이려고하는 경우에 적극적으로 관련 엔티티를 사용하는 : 가장 좋은 방법은 당신이 쿼리 같습니다 다른 경우

using System.Data.Entity; 
... 
var customer = MyService.GetCustomer<Customer>().where(c => c.Id == fooId).Include(u => u.Orders).ToList(); 

게으른 로딩을 선호합니다.

+0

그래서 탐색 속성을 쿼리하면 컴파일 된 쿼리보다 성능이 향상되지 않을까? – ManirajSS

+0

http://stackoverflow.com/questions/19319116/include-vs-load-performance-in-entityframework - 좋은 설명 –