2012-07-22 3 views
0

가 나는 쿼리의 성능 차이를 만들 것입니다Where 절이 Linq 쿼리에서 중요합니까?

 var query = from p in db.Posts 
        where p.IsActive.Equals(true) //Moved 
        join a in db.Author on p.Author equals a 
        join u in db.Users on p.PostedBy equals u 
        orderby p.PostedDate descending 
        select new ViewModel 
        { 
         ... 
        }; 

같은 C# 프로젝트

 var query = from p in db.Posts 
        join a in db.Author on p.Author equals a 
        join u in db.Users on p.PostedBy equals u 
        where p.IsActive.Equals(true) 
        orderby p.PostedDate descending 
        select new ViewModel 
        { 
         ... 
        }; 

내가 from p in db.Posts 근처 where p.IsActive.Equals(true)를 이동하면이 LINQ 쿼리를 가지고?

+0

이것은 Linq-to-SQL입니다. 맞습니까? –

+1

쿼리 공급자에 따라 달라집니다. 나중에 쿼리에서 필터링 한 것보다 적은 수의 항목에 합류하기 때문에 LINQ to Objects에 확실히 영향을 미칩니다. –

+0

@MareInfinitus SQL Server 2008 데이터베이스를 사용하고 있습니다. Linq-to-SQL을 추측합니다 ... – Nalaka526

답변

1

만약 당신이 그것을 할 것이 확실하지 않지만, SQL 데이터베이스에 대해 그것을 사용하는 경우 어떤 차이를 만들어서는 안됩니다. 두 쿼리는 이와 같은 SQL로 변환됩니다

SELECT ... 
FROM Posts INNER JOIN Author ON ... INNER JOIN Users ON ... 
WHERE Posts.IsActive = true 
... 
+0

이동했을 때도 작동합니다 ... 어쨌든 답변을 주셔서 감사합니다. :) – Nalaka526

1

에 관한 성능, 나는 강하게은 언제 어디 전에 조인 을 넣어 제안했다.

이유는합니다 (P이 게시물에서 선택되고 만 일치하는 저자의 행 및 사용자옵니다. 반대에서

, 당신은 어디에있는 경우 작은 세트 을 이미 조인입니다 시작 caresian 근처에 (큰) 제품을 계산 한 후 여과. (특별한 경우는, 하나의 테이블에 영향을하지만, 쿼리가 가끔 변경 될 수 아무도 다음이 느린 이유 모른다).

읽어주세요 SO Why is LINQ join so much faster than LINQ where

특별한 경우 : 데이터베이스에 영향을 미치기 때문에 결과 SQL 문은 두 쿼리에서 동일해야합니다. 한번보세요!

관련 문제