2017-12-17 2 views
-2

내가 엔티티 프레임 워크를 사용하여 C#에서 다음과 같은 코드를 가지고 :LINQ 쿼리 성능이 낮은

코드에서
using (var db = new RespDB()) 
       { 
        var result = (from proj in db.ProjectModels 
            where proj.Name.Equals(project.Name) 
            where proj.Platform.Equals(project.Platform) 
            where proj.Variant.Equals(project.Variant) 
            where proj.MY == project.MY 
            where proj.Controller.Equals(project.Controller) 
            select proj).FirstOrDefault(); 
       } 

, "프로젝트"는 개체입니다. 문제는 데이터베이스가 크고이 코드가 Visual Studio 성능 분석을 사용하여 매우 느리고 "firstordefault"메서드와 "where"에 문제가 있음을 확인했습니다. 이 코드를 최적화 할 수있는 방법이 있습니까?

+1

SQL에 쿼리를 작성하고 SSMS에서 실행하여 비교하십시오. 그것은'많은 곳 '이고 인덱스에 의해 다루어 진 모든 컬럼을 가지고 있는지 의심 스럽습니다. – Crowcoder

+1

EF 성능은 DB 성능입니다. C#에서 성능을 확인하지 마십시오, SQL 쿼리를 확인하십시오. – Sefe

답변

1

엔티티 모델에는 키 또는 고유 인덱스 속성이 있어야합니다. 그래서이 쿼리는해야 하나

var result = (from proj in db.ProjectModels 
       where proj.ID == project.ID 
       select proj).FirstOrDefault(); 

또는

var result = (from proj in db.ProjectModels 
       where proj.Name == project.Name 
       && proj.Platform == project.Platform 
       && proj.Variant == project.Variant 
       select proj).FirstOrDefault(); 

경우 (이름, 플랫폼, 변형) 중 하나를 엔티티 키 또는 고유 인덱스를 가지고있다.

+0

첫 번째 작업을 수행 할 수 없습니다. 코드에서 찾으려는 코드입니다.이 코드의 아이디어는 프로젝트의 ID를 찾는 것입니다. 해당 프로젝트 엔티티가 있는지 확인하고 싶습니다. – Omerta

+0

그래서 "기존"프로젝트가 무엇인지 정의하는 비 핵심 속성에 고유 색인이 필요합니다. –